2013-06-17 2 views
0

Я установки простой сеанс входа пользователя, как показано ниже на страницах моего веб-приложения:PHP печенье на балансировкой нагрузки веб-серверов

if (!isset($_SESSION['username'])){ 
      if (isset($_COOKIE['username'])){ 
       $_SESSION['username'] = $_COOKIE['username']; 
      } 

я начал замечать, что в некоторых случаях я потеряю входа в сеанс. Я проверил время истечения срока действия cookie, и это определенно было задано для будущей даты. Поведение было довольно случайным, когда иногда репликация действия не вызывала бы проблемы.

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

Я бы подумал, что когда вы нажмете веб-сервер, он будет поддерживать сеанс с ним. Однако поведение предполагает иное.

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

Предложения очень ценятся.

+0

Можете ли вы сохранить сеанс в memcache (d)? Если это так, вы можете использовать memcache в качестве распределенного хранилища кешей/сеансов для всех ваших веб-серверов. – JimL

+0

@ JimL: Спасибо, но никогда не слышал об этом. Мне нужно будет найти это сейчас и узнать. – kaizenCoder

ответ

0

Печенье не заботится о том, какой серверный сервер обрабатывает запрос, если URL-адрес не изменяется. Если URL-адрес изменится с www1.xxx.xx на www2.xxx.xx, вы можете сохранить файлы cookie с указанным путем (xxx.xx), и оба поддомена смогут увидеть файл cookie.

Еще одна вещь, которая, скорее всего, ошибается, заключается в том, что сеансы arent разделяются между обоими серверами. Для этого вы можете использовать memcached.

+0

Привет, как вы понимаете, «сохранить печеньки с включенным путем?» Вы имеете в виду передать его в URL-адрес и получить к нему доступ? – kaizenCoder

+0

см. Http://php.net/manual/en/function.setcookie.php, но я хочу сказать, что это домен, а не путь. сожалею –

Смежные вопросы