Как создать общий объект между различными сессиями в PHP? - PullRequest
5 голосов
/ 17 ноября 2011

Как создать общий объект между различными сессиями в PHP?

Я думаю об использовании файла или таблицы памяти MySQL.Использование файла не является хорошим вариантом, потому что он не имеет блокировки и работает медленно.Использование таблицы памяти MySQL - хороший вариант, но как сохранить экземпляры классов (объекты) в таблице?Сериализация объекта и помещение его в таблицу также выполняется медленно.

Option 1: MySQL memory table
Option 2: shm_attach,shm_detach,shm_get_var,shm_has_var,shm_put_var,..
Option 3: Memcache

Проблема в использовании таблицы памяти MySQL требует запросов.Memcache не входит в стандартную установку PHP.Для работы функций shm_ * в Windows требуется, чтобы PHP был собран из исходного кода с параметром "--enable-sysvsem", а для этого требуется настройка в php.ini, где разработчик может не иметь доступа все время.

Что из перечисленного лучше?Любые другие варианты?

Ответы [ 4 ]

1 голос
/ 22 ноября 2012

Я не вижу упомянутых apc:

http://www.php.net/manual/en/book.apc.php

Не уверен, что это в течение одного сеанса, поскольку в руководстве отсутствует какая-либо информация о том, что он делает, но в других сообщениях, которые я вижу наальтернатива memcache.

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

1 голос
/ 17 ноября 2011

Если вы хотите обмениваться объектами (экземплярами классов) между различными процессами, вы всегда будете связаны с serialize и unserialize независимо от того, какой тип слоя хранения вы используете (база данных, память, файлы, ...).

Если вы не хотите использовать serialize и unserialize, то вы мало что можете сделать.

1 голос
/ 18 ноября 2011

Memcache не входит в стандартную установку PHP. Функции семафора и общей памяти не поддерживаются в Windows.

Скорее всего, единственным решением является использование таблицы памяти MySQL с сериализацией объекта.

1 голос
/ 17 ноября 2011

Я помню похожую проблему с решением в разработке eyeOS.

Я знаю, что вам не совсем по душе использование файла, но что делать, если вы хотите сохранить переменную (и), которой хотите поделиться, в формате xml.

Если вы хотите, чтобы он был специфичен для определенных сеансов, вы можете использовать уникальные токены (сорта паролей) для каждого набора сеансов и настроить контроллер, который направляет запросы в правильный XML-файл сеанса на основе токена.

В целях безопасности вы можете хранить информацию XML в файле php и разрешать получение информации только с помощью POST с использованием правильного токена.

Этот метод позволит вам безопасно получать доступ, редактировать и удалять (уничтожать) общие сеансы.

...