Почему PHP не поддерживает сессию между страницами? - PullRequest
1 голос
/ 01 октября 2010

У меня Windows Server 2008 с apache2.Сервер имеет 2 диска, и я запускаю экземпляр apache на обоих.Первый запускается как служба, второй - в командной строке.Они оба используют точную копию идентичного webroot в своей собственной папке htdocs.Также они оба используют одну и ту же установку PHP, которая находится на первом диске (Program Files (x86)).Мое приложение работает по протоколу SSL и использует PHP и MySQL.

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

Проблема на втором веб-сервере аналогична этот вопрос за исключением того, что у меня есть session_start () на каждой странице.

Мой скрипт входа в систему работает так:

  • Пользователь запрашивает страницу
  • Если пользователь не аутентифицирован, он возвращается на страницу входа
  • Если пользователь аутентифицирован, он получает $ _SESSION ["auth"] с данными своего профиля
  • Затемкогда пользователь просматривает главную страницу или другие страницы, требующие авторизации, он просто проверяет, установлена ​​ли переменная $ _SESSION ["auth"].

Какие-либо советы о том, как решить эту проблему?

РЕДАКТИРОВАТЬ: Небольшое уточнение.У меня есть идентификатор сессии на каждой странице.Этот идентификатор не меняется, когда меня перенаправляют.У меня нет данных в переменной $ _SESSION на странице, на которую я перенаправляю.

Ответы [ 3 ]

1 голос
/ 01 октября 2010

Посмотрите на разрешения каталога сеанса php, в котором хранятся файлы для сеанса. Если у php нет прав на запись, создание и изменение файлов, вы не сможете ничего хранить в вашей переменной $ _SESSION.

1 голос
/ 01 октября 2010

Я нашел решение.Пользователь, который запускает веб-сервер, имел разрешение на все пути в httpd.conf, но не имел разрешения на доступ ко всем путям в PHP.ini.session.save_path - один из этих путей, и сервер не может получить доступ к данным сеанса, если он не может сохранить данные сеанса.

Параметр session.save_path был установлен в C: \ Windows \ Temp, и изначально я не думал, что мне нужно давать какие-либо разрешения, кроме папок apache, php и webroot.вся ваша помощь!

0 голосов
/ 01 октября 2010

Сеансы прерываются, если пользователь посещает подпуть корневого каталога вашего сайта, а затем перемещается вверх. Это связано с тем, что файл cookie будет установлен только для этого пути, а не для всего домена. Больше информации здесь: http://www.php.net/manual/en/function.session-start.php#91298

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