Какова история позади сессии - PullRequest
2 голосов
/ 28 января 2012

Проще говоря, у меня было достаточно сеанса, так что лучше всего настроить сервер для этого сеанса.

Пример Допустим, у нас есть 2 файла [a.phpи b.php]

a.php код

<?php
session_start();
$_SESSION['msg'] = "Hello world";
header("Location: b.php");
exit;
?>

b.php код

<?php
session_start();
echo $_SESSION['msg'];
unset($_SESSION['msg']);
?>

Дада, это работает со многими из вас, но мне интересно, почему это работает со мной на определенном хостинге со следующей информацией php, проверьте

PHP INFO (РАБОТАЕТ) PHP Версия 5.3.8 register_globals =На

Пример Работает

, пока он не работает на моем втором хостинге, который имеетследующая информация

PHP INFO (НЕ РАБОТАЕТ) PHP версии 5.2.17 register_globals = On

Пример не работает и дает 0

почему?что не так с настройками php сервера, я очень расстроен, так как мой сайт полностью зависит от этих сеансов в качестве предупреждений :(

Спасибо за помощь

Ответы [ 3 ]

1 голос
/ 28 января 2012

Сеансы хранятся в файлах на обоих серверах (session.save_handler = files), но session.save_path отличается: /var/php_sessions для сервера, который не работает, и «пустой» для сервера работает (/ tmp будет взято по умолчанию).

Существует ли /var/php_sessions и доступна ли запись для пользователя вашего веб-сервера (обычно apache, httpd или www-data)? Вы должны найти файл сессии в /var/php_sessions. Сопоставьте идентификатор сеанса с идентификатором, предоставленным файлом cookie.

1 голос
/ 28 января 2012

Другим источником ошибок могут быть прокси-помехи. Ваш второй сервер работает под управлением Nginx / Varnish, оба из которых можно настроить для работы в качестве обратных прокси.

Меня также раздражает, что ответ второго сервера на запрос a.php начинается с '0'. Я могу понять, что b.php выводит '0', но почему a.php должен это делать?

Убедитесь сами:

0<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">\n
^ <-- this is strange, isn't it?

Вы уверены, что загрузили правильный файл a.php?

В другой заметке проверьте журналы ошибок вашего веб-сервера.

1 голос
/ 28 января 2012

Сессии отправляются в заголовке, и вы перенаправляете с заголовком Location. Функция header () будет отправлять только 1 заголовок за один раз на PHP.net. Я думаю, что вы перенаправляете ДО того, как сервер отправит заголовки сеанса пользователю. Я могу ошибаться, поэтому протестируйте мета-обновление и посмотрите, что произойдет. Да, это устарело, но здесь хорошо подойдет для тестирования:

echo '<meta http-equiv="refresh" content="0;b.php">';

заменить:

header("Location: b.php");

Надеюсь, что это работает для вас

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