Здравствуйте, пытаюсь разобрать с API одно CMS когда делаю print_r($_SESSION[sbAuth]) выводит: Код (PHP): sbAuth Object ( [mId:private] => 3913 [mCatIds:private] => Array ( [0] => 21 ) [mLogin:private] => demo6 [mEmail:private] => rdr@ya.ru [mName:private] => 1111111111111 [mIP:private] => 194.146.119.13 [mBrowser:private] => Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36 [mSessionId:private] => de0fc753fcf066415070d97c11628ff8 [socialLogin:private] => [socialNetworks:private] => Array ( ) [isSystemUser] => ) как получить mid отсюда? Подсказка от модератора: Любой код или текст конфигурации пишите между тегом [code=php] и [/code]. Используйте отступы в коде для форматирования текста. Это помогает быстрее понять вас, увеличивает шанс на получение ответа. Что выделять? Например: PHP, HTML, CSS, JavaScript, SQL, XML, .htaccess, ini, регулярные выражения, код шаблонизаторов, любая другая разметка, результаты array/object dump и т. д.
прост объект может не пережить сериализацию-десериализацию в сессии =) Может там и нет никаких методов уже.
Ну если это код CMS, а не самописа, я думаю, там реализовали интерфейс Serializable или магию. И судя по тому, что выводит print_r, вполне себе пережил
можно. давайте! ))) код ищите в своей CMS. ищите класс sbAuth. где-то нужное свойство там упоминается в публичном методе.
код CMS зазенден. Я предполагал что можно сделать Код (PHP): $a=new $_SESSION[sbAuth]; print $a->mId; но не выходит. еще думаю из строки вытащить: Код (PHP): print serialize($_SESSION[sbAuth]); O:6:"sbAuth":11:{s:11:"sbAuthmId";s:4:"3913";s:15:"sbAuthmCatIds";a:1:{i:0;s:2:"21";}s:14:"sbAuthmLogin";s:5:"demo6";s:14:"sbAuthmEmail";s:9:"rdr@ya.ru";s:13:"sbAuthmName";s:13:"1111111111111";s:11:"sbAuthmIP";s:14:"194.146.119.13";s:16:"sbAuthmBrowser";s:101:"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36";s:18:"sbAuthmSessionId";s:32:"de0fc753fcf066415070d97c11628ff8";s:19:"sbAuthsocialLogin";b:0;s:22:"sbAuthsocialNetworks";a:0:{}s:12:"isSystemUser";b:0;} Подсказка от модератора: Любой код или текст конфигурации пишите между тегом [code=php] и [/code]. Используйте отступы в коде для форматирования текста. Это помогает быстрее понять вас, увеличивает шанс на получение ответа. Что выделять? Например: PHP, HTML, CSS, JavaScript, SQL, XML, .htaccess, ini, регулярные выражения, код шаблонизаторов, любая другая разметка, результаты array/object dump и т. д.
там слово "private" видишь? поэтому не выходит. гугль говорит, что тебе нужен метод getUserId http://api.sbuilder.ru/SB_SiteAuth/sbAuth.html#getUserId если что, мопед не мой, претензии к гуглю. а вообще если штука платная, купите её и обращайтесь в офф. техподдержку. какого хрена мы должны помогать вам наябывыть таких же разрабов как мы?!
На самом деле, в таком виде он не может жить в сессии. это и удивляет. То что там не сериализованная строка, а сам объект. Или это строка?
denis01, т.е. он лежит там в сериализованном виде, и сессия его обратно восстанавливает когда пытаешься вызвать эту сессионную переменную?
mahmuzar надо смотреть, но думаю там просто лежит в сериализованном формате название класса и все значения его свойств, по мне так этого достаточно
denis01, если он лежит в сериализованном виде то все понятно. Но он как бы получает объект из сессии, а этого невозможно (судя по дампу он объект а не сериализованная строка объекта). Добавлено спустя 1 минуту 27 секунд: посмотреть не помешало бы)
Код (PHP): <?php session_start(); class MyClass { const CONSTANT = 'значение константы'; public $pu = 'public_val'; public $pr = 'private_val'; function showConstant() { echo self::CONSTANT . "\n"; } } $_SESSION['srclass'] = new MyClass(); Файл sess_o8njouesl128hh62hr61gmuhk1 Код (PHP): srclass|O:7:"MyClass":2:{s:2:"pu";s:10:"public_val";s:2:"pr";s:11:"private_val";} Если private $pr, файл читать hex редактором Код (PHP): srclass|O:7:"MyClass":2:{s:2:"pu";s:10:"public_val";s:11:".MyClass.pr";s:11:"private_val";}
Ага, Код (PHP): var_export($_SESSION['srclass']); Код (PHP): MyClass::__set_state(array( 'pu' => 'public_val', 'pr' => 'private_val', ))
denis01, твой же код у меня: Код (PHP): object(MyClass)#2 (2) { //дамп сессионной переменной в том же скрипте ["pu"]=> string(10) "public_val" ["pr"]=> string(11) "private_val" } Код (PHP): //дамп в другом скрипте object(__PHP_Incomplete_Class)#1 (3) { ["__PHP_Incomplete_Class_Name"]=> string(7) "MyClass" ["pu"]=> string(10) "public_val" ["pr"]=> string(11) "private_val" }
var_dump и var_export по разному себя ведут, var_export выдаёт на сколько помню правильный PHP код который можно использовать. https://php.net/manual/ru/language.oop5.magic.php#object.set-state
экспорт возвращает чистый код. А так, я делал и через var_export() Добавлено спустя 6 минут 35 секунд: Что меня удивило, раньше(прошло много времени) по не знанию я пытался сохранить массив в сессии у меня не получалось, оказывается, что там нельзя хранить объкты и массивы, но к моему сегодняшнему удивлению, оказывается в php 5.5.4 с появлением сериализации появилась такая возможность сохранять объекты в сессии. Только надо сделать предварительную настройку php:
Автоматическая сериализация и десериализация объекта при записи в сессию была еще в php4, так что с добрым утром.