За последние 24 часа нас посетили 16553 программиста и 1679 роботов. Сейчас ищут 909 программистов ...

Востановление сессии по ID

Тема в разделе "Прочие вопросы по PHP", создана пользователем lacost, 20 мар 2011.

  1. lacost

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

    С нами с:
    7 апр 2008
    Сообщения:
    57
    Симпатии:
    0
    Необходимо воостановить переменные сессии по её ИД, как это можно сделать?

    пробовал след. способы:

    PHP:
    1.         $session =  $_SESSION;
    2.         session_id($this->_id);
    3.         return $session;
    Но к сожалению
    Запись в БД конечно поможет, но серриализация отличается от стандартной, да и не выход это
     
  2. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    а цель какая?
     
  3. lacost

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

    С нами с:
    7 апр 2008
    Сообщения:
    57
    Симпатии:
    0
    Пока целью является распечатать информацию о пользователе которая скопилась у него в сесси. А вообще функция getSessionById на мой взгляд в классе управляющим сессиями не помешает, если честно даже не думал что это может быть такой проблемой..
     
  4. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    lacost
    Пока целью является распечатать информацию о пользователе которая скопилась у него в сесси
    в мертвой сессии или в той, что сейчас живет?
     
  5. Gromo

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

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    lacost
    у меня данный вопрос навевает на мысль - получить данные с другой сессии, уже закрытой.
    для доступа к данным текущей сессии никаких таких манипуляций не требуется.
    всё доступно в массиве $_SESSION
     
  6. lacost

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

    С нами с:
    7 апр 2008
    Сообщения:
    57
    Симпатии:
    0
    В той что сейчас живёт конечно.

    Разве можно что то достать из мёртвых сессий?

    Можно конечно при загрузке просто серриализовать сессию и сохранить в БД, но по моему это будет лишним, и подойдет только в случае если нужно просматривать мёртвые сессии.
     
  7. lacost

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

    С нами с:
    7 апр 2008
    Сообщения:
    57
    Симпатии:
    0
    Объясню ещё рас, проблема как мне кажется тривиальна, но уже второй день не могу найти решение..

    ИД моей сессии - 1
    На сайте находятся активные пользователи с сессиями 2,3,4, и т.д. Я хочу посмотреть что у них твориться в сессиях

    P.S. Если метод для получения ИД открытых на данный момент сессий? На данный момент ИД открытых сессий пишутся в БД + ГС конечно, что в принцепе приемлемый вариант но думаю не самый лучший :)

    Буду признателен за помощь.
     
  8. Gromo

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

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    lacost
    зачем это нужно? плохая идея играться с чужими сессиями.
    если админу нужно посмотреть что хранится в чужих сессиях - нужно данные сессии сохранять в базу данных.
    это будет оптимальнее, но труднее в реализации. а от сериализации никуда не деться.
     
  9. MiksIr

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

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    А разве session_id очищает файл с сессией, если такой существует? Сомневаюсь, но если да - setcookie в помощь
     
  10. lacost

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

    С нами с:
    7 апр 2008
    Сообщения:
    57
    Симпатии:
    0
    MiksIr, Совершенно не понял что вы имели в виду.

    Gromo, Дело в том, что если выбрать способ хранения сессий в БД, то все данные сессии и так будут там. Поэтому создавать ещё 1 похожую таблицу мне кажется немного не целесообразно.

    единственное что сериализация которая проходит при сохранение сессии в базу отличается от стандартной, есть конечно вариант распарсить самому, но это уже попахивает изобретением велосипеда.
     
  11. Gromo

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

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    lacost
    ты лучше скажи цель всего этого, для чего хочешь использовать столь "хороший" способ
     
  12. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Бляха-муха. а ты сам не можешь извнутри посмотреть? что за бред с лазаньем в "чужую" сессию, если это твой сервер. пипец. Мозги на изнанку вывернулись =)

    но комментс.
     
  13. MiksIr

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

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Разберитесь как работает сессия. Что такое sid и где он хранится.

    О... сессия еще и в базе. Да уж ;)
     
  14. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    сессия в базе это норм практика.
     
  15. MiksIr

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

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Я не про то. Я про это. Ну, всмысле, посмотреть.
     
  16. lacost

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

    С нами с:
    7 апр 2008
    Сообщения:
    57
    Симпатии:
    0
    Как я уже говорил, поставлена задача - организовать интерфейс для просмотра данных сессии пользователей, которые находятся на сайте.

    - нет доступа к файловой системе
    - нужно организовать именно интерфейс для просмотра

    Пока я вижу 2 варианта

    1) Просто записывать все данные сесси в базу, при каждом обращении клиента к серверу. Но это черевато лишними записями в базе + лишний запрос на каждую страницу, не критично но не красиво.

    2) Организовать хранение сессий в базе и написать собственную функцию unserialize чтобы достать данные оттуда.


    Склоняюсь ко 2-му варианту.
    Если честно я думал что проблема избитая и тривиальная и есть куча стандартных методов решения, видимо я ошибся =)
     
  17. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
  18. MiksIr

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

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Как это "нет доступа к файловой системе". А php вам на что?
    Если используете файлы как хранилище сессий - открывайте директорию и читайте файлы. Если используете базу как бекенд сессий - читайте базу.
    Как декодировать информацию сессии? Читайте раздел функций по работе с сессией в документации - там есть соответствующие функции + коментарии к ним.
     
  19. lacost

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

    С нами с:
    7 апр 2008
    Сообщения:
    57
    Симпатии:
    0
    При хранении данных в БД имеем сериализованный массив $_SESSION вот в таком виде
    Код (Text):
    1. userType|s:5:"admin";AdminLogin|s:4:"test";AdminEmail|s:4:"test";
    Чтобы эту строку превратить снова в объект обычная функция unserialize не подходит, возможно есть другая о которой я не знаю.
     
  20. MiksIr

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

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Возможно тебе даже сказали где ее искать.
     
  21. lacost

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

    С нами с:
    7 апр 2008
    Сообщения:
    57
    Симпатии:
    0
    Спасибо, ваш ответ помог. Проблема решена.
     
  22. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    я сказал все то же самое раньше =)