Заменить PHP-сессии - PullRequest
       7

Заменить PHP-сессии

0 голосов
/ 18 сентября 2009

У меня есть приложение типа социальной сети, над которым я работаю не менее 2 лет, мне нужно, чтобы оно хорошо масштабировалось, поэтому я приложил немало усилий для совершенствования кода этого приложения. Я очень часто использую сеансы для кэширования результатов базы данных для пользователя, когда пользователь заходит на сайт. Я кэширую там идентификатор пользователя, имя пользователя, статус / роль пользователя, URL-адрес фотографии, онлайн-статус, время последней активности и некоторые другие вещи в переменные сеанса / массив. В настоящее время у меня есть 2 отдельных сервера для управления этим сайтом, 1 сервер для веб-сервера Apache и отдельный сервер для MySQL. Теперь я начинаю использовать memcache в некоторых областях, чтобы уменьшить нагрузку на базу данных.

Теперь мои сеансы хранятся на диске, и я знаю, что некоторые люди используют базу данных для хранения данных сеансов, для меня может показаться, что хранение данных сеансов, которые я кэшировал из mysql, отчасти испортило бы цель, если бы я переключился на хранение сеансов в mysql. Так что мне здесь не хватает? Почему люди предпочитают использовать базу данных для сессий?

Вот мои идеи: использование базы данных для сессий облегчит хранение и доступ к сессиям на нескольких серверах, является ли это основной причиной использования базы данных?

Также я должен использовать memcache для хранения временных переменных вместо сохранения их в сеансе?

Ответы [ 4 ]

2 голосов
/ 18 сентября 2009

Одна часть пакета Zend Server - это демон сеанса.

Будьте осторожны, используя memcache для этой цели. Когда память заполнена, она начинает выбрасывать вещи в FIFO-стиле.

Обнаружено на slideshare о создании собственного сервера сеансов с php-cli.

2 голосов
/ 18 сентября 2009

PHP имеет возможность использовать memcached для хранения сессий.

Это может быть просто выигрышный билет для вас.

Посмотрите на этот поиск в Google .

1 голос
/ 18 сентября 2009

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

Посмотрите на PHP set_save_handler () , чтобы узнать, как установить пользовательский обработчик сеанса. Требуется около 30 строк для установки одной, которая помещает сеанс в базу данных, хотя это не учитывает количество строк, чтобы сделать достойный обработчик базы данных. :-) Вам нужно будет сделать:

ini_set('session.save_handler', 'user');
ini_set('session.auto_start', '0');

... хотя session.auto_start должен быть в вашем php.ini (и установить в 0).

Если доступ к базе данных будет немного дороже, есть и другие вещи, которые вы можете сделать, чтобы смягчить это. Очевидным является наличие сервера БД, который просто для сеансов. Другой трюк состоит в том, чтобы заставить его совать вещи в memcache и в DB, ​​поэтому, когда он проверяет, отсутствует ли запись memcache, он просто возвращается к DB. С этим вы тоже можете пофантазировать и разделить сеанс так, чтобы часть его находилась в memcache, а остальное - в базе данных. Я думаю, что вам нужно поставить свои собственные функции доступа поверх API сессии PHP.

0 голосов
/ 18 сентября 2009

Основная причина сохранения данных сеанса в базе данных - безопасность, потому что в противном случае у вас нет возможности проверить их. Вы бы сохранили идентификатор сеанса вместе с данными в базе данных и сопоставили их, чтобы увидеть, не был ли подделан сеанс, но вы больше не можете использовать механизм сеанса сервера (apache) по умолчанию.

Для хранения переменных в memcache вместо сессии .. вы настроили кеш запросов базы данных? Сначала я бы посмотрел туда, поскольку с ним гораздо проще иметь дело, чем с memcache.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...