Данные сеанса 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 ]

0 голосов
/ 04 октября 2014

Еще несколько вещей, которые мне пришлось сделать (у меня была та же проблема: нет сохранения сессии после обновления PHP до 5.4). Вам это не нужно, в зависимости от того, что содержит php.ini вашего сервера (проверьте phpinfio ());

session.use_trans_sid=0 ; Do not add session id to URI (osc does this)
session.use_cookies=0;  ; ensure cookies are not used
session.use_only_cookies=0 ; ensure sessions are OK to use IMPORTANT
session.save_path=~/tmp/osc; ; Set to same as admin setting
session.auto_start = off; Tell PHP not to start sessions, osc code will do this

По сути, ваш php.ini должен быть настроен на отсутствие файлов cookie, а параметры сеанса должны соответствовать тому, что хочет osc.

Вам также может понадобиться изменить несколько фрагментов кода сеанса в application_top.php - создать объекты, которых нет в вызовах tep_session_is_registered (...) (например, объект навигации), установить переменные $ HTTP_ в более новый $ _SERVER. один и несколько других тестов isset для пустых объектов (Google для информации). В итоге я смог использовать оригинальные файлы sessions.php (include / classes и includes / functions) со слегка модифицированным application_top.php, чтобы все снова заработало. Настройки php.ini были основной проблемой, но это, конечно, зависит от того, что ваша серверная компания установила по умолчанию.

0 голосов
/ 31 июля 2009

Проверьте, используете ли вы session_write_close (); где-то я использовал это сразу после другого сеанса, а затем снова пытался записать в сеанс, и это не сработало ... так что просто прокомментируйте, что sh * t out

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