Сеансы PHP стираются между страницами SSL / не-SSL, даже в отдельных вкладках - PullRequest
2 голосов
/ 09 февраля 2011

Сценарий: я нахожусь на моем веб-сайте http://domain.com/, и вижу контент, который мне нужно модерировать.Я нажимаю ссылку «Администратор этой страницы», чтобы открыть ее на новой вкладке, которая отправляет меня на https://domain.com/myadmin/, и я повторно аутентифицируюсь, перехожу на соответствующую панель модерации моего сайта, выполняю свою работу и обычно покидаю эту вкладку.open.

Теперь вернемся к не-SSL-версии сайта, я перехожу на другие страницы и т. д., вижу что-то еще, чтобы модерировать, и возвращаю ли я свой старый домен https: //.com / myadmin / tab или откройте другую новую вкладку https: //domain.com/myadmin/, внезапно мой старый сеанс пропал, и я должен повторно пройти аутентификацию.

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

После долгих потаенных чтений я подумал, не связано ли это с настройкой php.iniof session.cookie_secure ... но поскольку мы заставляем всех, кто использует защищенную / myadmin / panel, повторно проходить аутентификацию, кажется, что защищенный сеанс просто исчезает.

Я думаю, что проблема является локальной для узла, которыйответы на запросы SSL.Если мы откроем вкладку для https: //domain.com/myadmin/ и войдем в систему, а затем удалим путь / myadmin / и просто перейдем по всему сайту как https: //domain.com/, кажется, что наша сессия никогда не исчезнет,Но как только мы нажимаем на ссылку в браузере, которая вынуждает нас перейти на небезопасную версию сайта, наша безопасная сессия становится бесполезной.

Ответы [ 2 ]

2 голосов
/ 09 февраля 2011
  1. Измените одно из имен ключей сеанса (например, PHPSESSID _SECURE или PHPSESSIDS для вашего безопасного соединения), чтобы не перезаписывать cookie в браузере пользователя.
  2. Проверьте свой путьнастройте файлы cookie, чтобы убедиться, что они охватывают те части вашего веб-сайта, которые вы хотите.
  3. Если вы не хотите, чтобы идентификатор защищенного сеанса отображался в незащищенном соединении, вы можете установить флаг безопасности в файле cookie.поэтому он переносится только в тот же домен.
1 голос
/ 09 февраля 2011

Вот что происходит.

  1. Когда пользователь заходит на сайт http без видимых файлов cookie, устанавливается незащищенный файл cookie PHPSESSID
  2. Когда пользователь посещает сайт администратора, создается безопасный файл cookie PHPSESSID
  3. Когда существует защищенный файл cookie с тем же именем, что и незащищенный файл cookie, который устанавливается, безопасный файл cookie заменяется незащищенным файлом cookie

Решение, как сказал Измир, состоит в том, чтобы изменить имена ключей сеанса так, чтобы они различались

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