За последние 24 часа нас посетили 17098 программистов и 1835 роботов. Сейчас ищут 1575 программистов ...

Объект в сессии

Тема в разделе "PHP для новичков", создана пользователем pumi, 11 фев 2016.

  1. pumi

    pumi Активный пользователь

    С нами с:
    25 ноя 2010
    Сообщения:
    9
    Симпатии:
    0
    Здравствуйте, пытаюсь разобрать с API одно CMS
    когда делаю

    print_r($_SESSION[sbAuth])
    выводит:
    Код (PHP):
    1. sbAuth Object
    2. (
    3.     [mId:private] => 3913
    4.     [mCatIds:private] => Array
    5.         (
    6.             [0] => 21
    7.         )
    8.  
    9.     [mLogin:private] => demo6
    10.     [mEmail:private] => rdr@ya.ru
    11.     [mName:private] => 1111111111111
    12.     [mIP:private] => 194.146.119.13
    13.     [mBrowser:private] => Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36
    14.     [mSessionId:private] => de0fc753fcf066415070d97c11628ff8
    15.     [socialLogin:private] => 
    16.     [socialNetworks:private] => Array
    17.         (
    18.         )
    19.  
    20.     [isSystemUser] => 
    21. )
    22.  
    как получить mid отсюда?

    Подсказка от модератора:
    Любой код или текст конфигурации пишите между тегом [code=php] и [/code].
    Используйте отступы в коде для форматирования текста.
    Это помогает быстрее понять вас, увеличивает шанс на получение ответа.
    Что выделять? Например: PHP, HTML, CSS, JavaScript, SQL, XML, .htaccess, ini, регулярные выражения, код шаблонизаторов, любая другая разметка, результаты array/object dump и т. д.
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    в сессии это жить не должно видимо. =)
     
  3. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.575
    Симпатии:
    1.759
    Через методы sbAuth
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    прост объект может не пережить сериализацию-десериализацию в сессии =) Может там и нет никаких методов уже.
     
  5. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.575
    Симпатии:
    1.759
    Ну если это код CMS, а не самописа, я думаю, там реализовали интерфейс Serializable или магию. И судя по тому, что выводит print_r, вполне себе пережил
     
  6. pumi

    pumi Активный пользователь

    С нами с:
    25 ноя 2010
    Сообщения:
    9
    Симпатии:
    0
    Через методы sbAuth
    Можно код?
     
  7. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.099
    Симпатии:
    1.243
    Адрес:
    там-сям
    можно. давайте! )))
    код ищите в своей CMS. ищите класс sbAuth. где-то нужное свойство там упоминается в публичном методе.
     
  8. pumi

    pumi Активный пользователь

    С нами с:
    25 ноя 2010
    Сообщения:
    9
    Симпатии:
    0
    код CMS зазенден.

    Я предполагал что можно сделать
    Код (PHP):
    1. $a=new $_SESSION[sbAuth];
    2. print $a->mId;
    3.  
    но не выходит.

    еще думаю из строки вытащить:
    Код (PHP):
    1. print serialize($_SESSION[sbAuth]);
    2.  
    3. 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;}
    4.  
    Подсказка от модератора:
    Любой код или текст конфигурации пишите между тегом [code=php] и [/code].
    Используйте отступы в коде для форматирования текста.
    Это помогает быстрее понять вас, увеличивает шанс на получение ответа.
    Что выделять? Например: PHP, HTML, CSS, JavaScript, SQL, XML, .htaccess, ini, регулярные выражения, код шаблонизаторов, любая другая разметка, результаты array/object dump и т. д.
     
  9. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.099
    Симпатии:
    1.243
    Адрес:
    там-сям
    там слово "private" видишь? поэтому не выходит. гугль говорит, что тебе нужен метод getUserId
    http://api.sbuilder.ru/SB_SiteAuth/sbAuth.html#getUserId

    если что, мопед не мой, претензии к гуглю. а вообще если штука платная, купите её и обращайтесь в офф. техподдержку. какого хрена мы должны помогать вам наябывыть таких же разрабов как мы?!
     
  10. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    переменные вижу, методов не вижу, потому и предположил, что вот не пережили. Хз.
     
  11. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    На самом деле, в таком виде он не может жить в сессии.
    это и удивляет. То что там не сериализованная строка, а сам объект. Или это строка?
     
  12. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Можно посмотреть файл сессии если используются файлы, что там в нём.
     
  13. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    denis01, т.е. он лежит там в сериализованном виде, и сессия его обратно восстанавливает когда пытаешься вызвать эту сессионную переменную?
     
  14. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    mahmuzar надо смотреть, но думаю там просто лежит в сериализованном формате название класса и все значения его свойств, по мне так этого достаточно
     
  15. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    denis01, если он лежит в сериализованном виде то все понятно.
    Но он как бы получает объект из сессии, а этого невозможно (судя по дампу он объект а не сериализованная строка объекта).

    Добавлено спустя 1 минуту 27 секунд:
    посмотреть не помешало бы)
     
  16. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Код (PHP):
    1. <?php
    2.  
    3. class MyClass
    4. {
    5.     const CONSTANT = 'значение константы';
    6.     public $pu = 'public_val';
    7.     public $pr = 'private_val';
    8.  
    9.     function showConstant() {
    10.         echo  self::CONSTANT . "\n";
    11.     }
    12. }
    13. $_SESSION['srclass'] = new MyClass(); 
    Файл sess_o8njouesl128hh62hr61gmuhk1
    Код (PHP):
    1. srclass|O:7:"MyClass":2:{s:2:"pu";s:10:"public_val";s:2:"pr";s:11:"private_val";} 
    Если private $pr, файл читать hex редактором
    Код (PHP):
    1. srclass|O:7:"MyClass":2:{s:2:"pu";s:10:"public_val";s:11:".MyClass.pr";s:11:"private_val";} 
     
  17. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    denis01, а дамп переменной покажешь?
     
  18. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Ага,
    Код (PHP):
    1. var_export($_SESSION['srclass']); 
    Код (PHP):
    1. MyClass::__set_state(array( 'pu' => 'public_val', 'pr' => 'private_val', )) 
     
  19. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    denis01, твой же код у меня:

    Код (PHP):
    1. object(MyClass)#2 (2) {
    2. //дамп сессионной переменной в том же скрипте
    3.   ["pu"]=>
    4.   string(10) "public_val"
    5.   ["pr"]=>
    6.   string(11) "private_val"
    7. } 
    Код (PHP):
    1. //дамп в другом скрипте
    2. object(__PHP_Incomplete_Class)#1 (3) {
    3.   ["__PHP_Incomplete_Class_Name"]=>
    4.   string(7) "MyClass"
    5.   ["pu"]=>
    6.   string(10) "public_val"
    7.   ["pr"]=>
    8.   string(11) "private_val"
    9. }
    10.  
    11.  
     
  20. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
  21. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    экспорт возвращает чистый код. А так, я делал и через var_export()

    Добавлено спустя 6 минут 35 секунд:
    Что меня удивило, раньше(прошло много времени) по не знанию я пытался сохранить массив в сессии у меня не получалось, оказывается, что там нельзя хранить объкты и массивы, но к моему сегодняшнему удивлению, оказывается в php 5.5.4 с появлением сериализации появилась такая возможность сохранять объекты в сессии.
    Только надо сделать предварительную настройку php:
     
  22. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    массивы всегда норм было хранить
     
  23. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    Все в одну кучу потянул. Массивы в куки, объекты в сессии.
     
  24. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Автоматическая сериализация и десериализация объекта при записи в сессию была еще в php4, так что с добрым утром.
     
  25. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    MiksIr там опечатка про cookie была