Реализация собственного управления сессиями в PHP - PullRequest
1 голос
/ 20 июля 2009

Какие есть варианты реализации собственного управления сессиями в PHP?

Есть ли хороший способ реализовать компонент, который выполняет все задачи сеанса? Как я могу создать класс, который получает HTTP-запрос и ответ в течение одного процесса запроса? Я нашел только параметр "session_save_handler", который, кажется, определяет обработчик хранилища. Что мне нужно, это заменить весь сеанс управления. Есть ли другой способ использования конфигурации PHP или мне нужно реализовать свой собственный контроллер, который получает все запросы и вызывает мое управление сессиями?

Спасибо за вашу помощь

С уважением, Майкл

Ответы [ 6 ]

3 голосов
/ 20 июля 2009

Нет, извините, нет интерфейса для переключения встроенных «модулей» на ваши собственные. Есть несколько хуков (например: session_save_handler(), set_error_handler()), и это, к сожалению, всё.

$ _SESSION является «суперглобальным» и не следует устанавливать IMO напрямую, если вы работаете над большими проектами. Тогда было бы лучше использовать пользовательский класс, отвечающий за обработку сессий. Упростит отладку кода и тому подобное.

1 голос
/ 20 июля 2009

Вы сказали это сами в одном из комментариев. Просто оберните $ _SESSION в классе. Я не думаю, что вы можете заменить его, но вы, безусловно, можете создать свой собственный интерфейс к нему.

Вы могли бы, например. Создайте класс, который создан первым, и вызовите session_start () внутри конструктора

1 голос
/ 20 июля 2009

Я не уверен, чего ты хочешь достичь. Похоже, вы хотите абстрагироваться от переменной $ _SESSION, а не менять хранилище.

Посмотрите, как Zend или Solar Framework обрабатывают доступ к Session.

http://www.phpeveryday.com/articles/Zend-Framework-Session-Introduction-P571.html http://solarphp.org/manual:sessions

Как я могу создать класс, который получает HTTP-запрос и ответ в течение одного процесса запроса?

Я не знаю, что вы подразумеваете под получением ответа, но у фреймворков есть front-/ page-контроллеры, которые направляют к выбранному действию, затем вызывают метод, который может получить доступ к Session (чтение / запись) и Request (читать) объекты и генерирует объект Response, который затем визуализируется с помощью шаблона.

Для автоматического тестирования вы можете создавать свои собственные объекты Request и Session и передавать их контроллеру страниц.

0 голосов
/ 15 января 2015

Вы можете создать реализацию сеанса с файлами cookie и базой данных. Вы устанавливаете куки на клиентском компьютере. Затем вы запускаете поиск по базе данных, что-то вроде этого:

+--------+------+
| sessid | data |
+--------+------+

Где sessid содержит ссылку на cookie (возможно, какой-то король хеша md5 или SHA), а данные - это что-то вроде массива JSON или Serialized.

Функции:

Вы можете использовать функцию runkit_function_redefine () , которая является частью Runkit API , чтобы переопределить функции сеанса_ xxxx .
Примечание: Runkit является частью PECL. То есть НЕ связано с PHP. Вам придется установить его самостоятельно .

Переменная сеанса:

$_SESSION = &SessionClass->data;

Сама простота: просто укажите $_SESSION как ссылку на ВАШИ данные.

0 голосов
/ 20 июля 2009

Проверьте эту страницу из php электронного руководства . Имеет много полезной информации по вашему вопросу. Надеюсь, это поможет.

0 голосов
/ 20 июля 2009

Использование функции session_save_handler() позволяет управлять тем, как информация о сеансе сохраняется и извлекается.

По умолчанию PHP хранит информацию о сеансе во временных файлах, расположенных где-то на вашем веб-сервере. Вы можете определить функции обратного вызова, используя функцию session_save_handler(), где вы можете хранить эту информацию в таблице базы данных.

Даже если вы обрабатываете сеансы с помощью своих собственных определенных функций с помощью функции session_save_handler(), вы все равно получите доступ к информации с помощью суперглобальной переменной $ _SESSIONS.

...