Написание пользовательского обработчика сеанса на удивление легко, но я думаю, что, вероятно, есть лучшие способы хранения данных сеанса, чем MEMORY
таблицы.
Схема что-то вроде (снято с изменениями из предыдущего вопроса )
CREATE TABLE IF NOT EXISTS `session` (
`id` char(32) NOT NULL,
`data` varchar(20000) NOT NULL,
`time_created` timestamp NOT NULL default '0000-00-00 00:00:00',
`time_updated` timestamp NOT NULL default '0000-00-00 00:00:00' on update CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `time_created` (`time_created`),
KEY `time_updated` (`time_updated`)
) ENGINE=MEMORY DEFAULT CHARSET=utf8;
тогда вам просто нужно определить функции обработчика сеанса, как описано в ссылке выше или в этом учебном пособии . Если вы хотите сохранить информацию о сеансе во время сборки мусора, вам просто нужно создать таблицу, идентичную приведенной выше, с использованием механизма INNODB
и добавить бит в конце функции gc()
, которая копирует строку из MEMORY
до INNODB
таблиц.
Однако MEMORY
таблицы имеют довольно значительные ограничения. Они не могут использовать столбцы BLOB
или TEXT
- вот почему у меня выше уродливо varchar(20000)
. Они имеют максимальный размер 16 МБ. Если у вас много пользователей, вы сохраняете много состояний или у вас проблемы со сборкой мусора, вы можете достичь этого предела и вылететь.
Лучше всего использовать обработчик сеанса memcache
, особенно если вам не нужно хранить информацию о сеансе в отдаленном будущем. Я почти уверен, что memcached
быстрее, чем любая СУБД (даже с MEMORY
таблицами), и он хорошо масштабируется в соответствии с дизайном. Кроме того, вам не придется писать собственные функции обработчика сеансов.