Данные сеанса PHP не сохраняются - PullRequest
56 голосов
/ 01 октября 2008

У меня одна из тех ситуаций "клянусь, я не трогал сервер". Я, честно говоря, не трогал ни один из скриптов php. Проблема у меня заключается в том, что данные php не сохраняются на разных страницах или обновления страниц. Я знаю, что новый сеанс создается правильно, потому что я могу установить переменную сеанса (например, $ _SESSION ['foo'] = "foo" и распечатать его обратно на той же странице просто отлично. Но когда я пытаюсь использовать эту же переменную на другой странице это не задано! Есть ли какие-либо функции или информация php, которые я могу использовать на своем хост-сервере, чтобы увидеть, что происходит?

Вот пример сценария, который на данный момент не работает на сервере моих хостов:

<?php
session_start();
if(isset($_SESSION['views']))
    $_SESSION['views'] = $_SESSION['views']+ 1;
else
    $_SESSION['views'] = 1;

echo "views = ". $_SESSION['views'];
echo '<p><a href="page1.php">Refresh</a></p>';
?>

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

Вот phpinfo () для сервера моих хостов (версия PHP 4.4.7): alt text

Ответы [ 22 ]

2 голосов
/ 10 апреля 2010

Если вы установите сеанс в php5, а затем попробуйте прочитать его на странице php4, он может выглядеть не в том месте! Сделайте страницы той же самой версией php или установите session_path.

2 голосов
/ 01 июля 2009

Я знаю одно решение, которое я нашел (OSX с Apache 1 и только что переключился на PHP5), когда у меня была похожая проблема, состоящая в том, что сброс одного определенного ключа (то есть unset ($ _ SESSION ['key']);) вызывал его сохранить. Как только я больше не сбрасывал этот ключ, он сохранялся. Я никогда не видел это снова, за исключением того сервера на другом сайте, но тогда это была другая переменная. Ничего особенного не было.

Спасибо за это, Дэррил. Это помогло мне. Я удалял переменную сеанса, и по какой-то причине это препятствовало фиксации сеанса. теперь я просто устанавливаю его на ноль (что хорошо для моего приложения), и это работает.

1 голос
/ 03 октября 2014

Добавление моего решения:

Проверьте, имеете ли вы доступ к правильному домену . Я использовал www.mysite.com, чтобы начать сеанс, и попытался получить его от mysite.com (без www).

Я решил эту проблему, добавив htaccess переписать все домены в www, чтобы быть на безопасной стороне / site.

Также проверьте, используете ли вы http или https.

1 голос
/ 23 сентября 2012

Отредактируйте свой php.ini.
Я думаю, что значение session.gc_probability равно 1, поэтому установите его на 0.

session.gc_probability=0
1 голос
/ 20 июня 2012

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

У меня была эта проблема раньше, когда перед session_start () у меня была пустая строка, из-за которой он не работал должным образом.

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

У меня была эта проблема при использовании защищенных страниц, откуда я заходил с www.domain.com/auth.php, перенаправленных на domain.com/destpage.php. Я удалил www из ссылки auth.php, и это сработало. Это бросило меня, потому что все работало иначе; хотя сессия не была назначена, когда я прибыл в пункт назначения.

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

Я знаю одно решение, которое я нашел (OSX с Apache 1 и только что переключился на PHP5), когда у меня была похожая проблема, состоящая в том, что сброс одного определенного ключа (то есть unset ($ _ SESSION ['key']);) не вызывал его сохранить. Как только я больше не сбрасывал этот ключ, он сохранялся. Я никогда не видел это снова, за исключением того сервера на другом сайте, но тогда это была другая переменная. Ничего особенного не было.

1 голос
/ 12 июля 2011

У меня был путь к сессионному cookie, установленный на "//" вместо "/". Firebug потрясающий. Надеюсь, это кому-нибудь поможет.

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

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

1 голос
/ 31 мая 2009

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

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