PHP: файлы сеанса не содержат данных

Я просматривал Интернет, включая переполнение стека, в течение нескольких дней, пытаясь решить мою проблему с сеансами PHP. Во-первых, я заметил, что в большинстве руководств просто говорится: «Вот код, иди и используй его». а не столько "Вот как это работает". Кроме того, все проблемы/ответы, которые я нахожу, связаны с потерей информации при обновлении или после переключения страниц, и ни один из них не относится ко мне.

Данные в $_SESSION сохраняются/загружаются независимо от того, какую страницу я просматриваю. Моя проблема в том, что когда я просматриваю файлы сеанса на сервере, в них нет данных. Кроме того, когда я уничтожаю сеанс или сбрасываю переменные, информация по-прежнему сохраняется, и при следующем доступе к $_SESSION извлекается старая информация.

Для устранения неполадок с поведением сессий на моем сервере я создал очень простой скрипт:

<?php
// Use $HTTP_SESSION_VARS with PHP 4.0.6 or less
if (!isset($_SESSION['count'])) {
  $_SESSION['count'] = 0;
} else {
  $_SESSION['count']++;
}

echo $_SESSION['count'];
?>

Это ВЕСЬ код на странице (можно посмотреть здесь: ). Каждый раз, когда эта страница обновляется, новый пустой файл сеанса сохраняется в указанном каталоге на сервере, и счетчик не увеличивается.

Дополнительная информация:
Для получения информации об установке php:
Размещено на общем хостинге GoDaddy — ОС Linux
В ближайшее время я обновлю разрешения для каталога phpsessions, чтобы его можно было временно просматривать. ()


person gNerb    schedule 10.07.2011    source источник
comment
Некоторые из вас оставили заметки о вызове session_start(). Я хотел бы подчеркнуть, что я разместил ссылку на phpinfo.php на своем сайте ( gnerb.com/phpinfo.php ), в которой показано, что session.auto_start включен, и поэтому вызов session_start() не требуется. - все 0 сек назад редактировать   -  person gNerb    schedule 11.07.2011
comment
Кроме того, используя javascript:alert(document.cookie); возвращает идентификатор сеанса, назначенный вашему сеансу. Проблема в том, что, несмотря на то, что файл cookie сеанса отправляется в браузер зрителя, сервер запускает новый сеанс каждый раз, когда страница обновляется.   -  person gNerb    schedule 11.07.2011
comment
Еще один комментарий: я временно сделал каталог phpsessions доступным для просмотра, чтобы вы могли видеть файлы сеанса. Чтобы продублировать проблему, посетите gnerb.com/count.php на одной вкладке и gnerb.com/phpsessions на другой вкладке. Обновите страницу подсчета, а затем обновите список каталогов и повторите. Каждое обновление создает/сохраняет файл сеанса вместо загрузки сеанса, связанного с идентификатором сеанса, предоставленным зрителю при первом посещении.   -  person gNerb    schedule 11.07.2011


Ответы (3)


Вам необходимо вызвать session_start(), прежде чем пытаться использовать сеанс.

person prodigitalson    schedule 10.07.2011

Вы должны начать сеанс, используя session_start()

Не только один раз на каждой странице, которую вы используете, убедитесь, что у вас есть session_start()

Нравится:

<?php
session_start();

// Use $HTTP_SESSION_VARS with PHP 4.0.6 or less
if (!isset($_SESSION['count'])) {
  $_SESSION['count'] = 0;
} else {
  $_SESSION['count']++;
}

echo $_SESSION['count'];
?>
person Sudantha    schedule 10.07.2011
comment
Вопреки моему здравому смыслу, я внес рекомендованное вами изменение, и функция session_start() не решает проблему. Пожалуйста, обратитесь к моим комментариям к исходному сообщению. - person gNerb; 11.07.2011

ОБНОВЛЕНИЕ: я давно не сталкивался с переполнением стека и решил оглянуться на этот вопрос, потому что это был один из двух, которые я задавал. Я хотел бы упомянуть, что проблема заключалась в том, что имя сеанса php было изменено, и его необходимо было изменить обратно на значение по умолчанию.

person gNerb    schedule 08.12.2013