Переменные сеанса PHP не поддерживаются

У меня есть приложение, которое работает с переменными сеанса без проблем. Я начинаю сеанс перед заголовками на каждой странице, которая использует, когда это было хорошо, тогда неожиданно я получаю неопределенную ошибку индекса при переходе на страницу, отличную от той, которая устанавливает переменные сеанса. Но только на некоторых браузерах . Иногда сеансы поддерживаются, а иногда и нет.

Похоже, что файлы cookie не хранятся некоторое время. Я делал проверки с использованием разных браузеров, и иногда файлы cookie хранятся, а иногда нет.

Я сделал эксперимент. Я использовал Firefox для использования в приложении, и я следил за папкой tmp, где хранятся сеансы. Я очистил его. Используя firefox, я начал использовать приложение, используя все страницы, на которых были заняты сеансы, и в конце я проверил папку tmp, и там был один файл сеанса.

То же самое было с Internet Explorer, и теперь есть 7 разных файлов сеансов.

Я использую PHP 5.3.0 со стеком WAMP. Apache 2.2.11. Поддержка сеанса включена в моем phpinfo ().

Я вызываю дамп var на первой странице и распечатывает данные сеанса. На любых последующих страницах переменная сеанса пуста.

<?php var_dump($_SESSION); ?> array(0){} 

Может ли кто-нибудь помочь мне разобраться с решением?

UPDATE – настройки PHP INI SESSION

 Directive Local Value Master Value session.auto_start Off Off session.bug_compat_42 On On session.bug_compat_warn On On session.cache_expire 180 180 session.cache_limiter nocache nocache session.cookie_domain 82.68.26.169 82.68.26.169 session.cookie_httponly Off Off session.cookie_lifetime 0 0 session.cookie_path / / session.cookie_secure Off Off session.entropy_file no value no value session.entropy_length 0 0 session.gc_divisor 1000 1000 session.gc_maxlifetime 1440 1440 session.gc_probability 1 1 session.hash_bits_per_character 5 5 session.hash_function 0 0 session.name PHPSESSID PHPSESSID session.referer_check no value no value session.save_handler files files session.save_path c:/wamp/tmp c:/wamp/tmp session.serialize_handler php php session.use_cookies On On session.use_only_cookies On On session.use_trans_sid 0 0 

ОБНОВЛЕНИЕ – Решение

Поскольку мое приложение использовало iframe, который вытаскивал страницы из другого домена (который я создал), файлы cookie, которые я пытался установить, блокировались. Настройте заголовок P3P, и проблема, похоже, решена!

Мое предложение из вашего предыдущего вопроса все еще стоит: пожалуйста, сравните идентификаторы сеанса.

Решение может быть таким же простым, как ваш браузер не принимает cookie сеанса.

Вы получаете идентификатор сеанса, вызывая session_id() . Сделайте это сразу после session_start() он должен дать вам постоянное значение, если сеанс тот же. В противном случае для каждого запроса создается новый сеанс.

Также проверьте C:\wamp\tmp . Файлы gazillion в этом каталоге могут указывать свежие сеансы для каждого запроса.

EDIT. Поскольку мы подтвердили новые сеансы для каждого запроса, пришло время выяснить, принимаются ли cookie сеанса. Проверьте настройки своего браузера и подтвердите, что файл cookie для вашего домена (я думаю, это «localhost») с именем PHPSESSID можно найти.

Вы вызываете session_start() на каждой странице, которая обращается к данным сеанса?

Изменить: И вы получаете один и тот же идентификатор сеанса каждый раз?
Кроме того, может быть некоторая ошибка или предупреждение, которые вам не хватает (например, уже отправленные заголовки) из-за настроек?

здесь смысл в

 while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC)) { $_SESSION['saveddata'] = $row; } 

он перезаписывает значение $_SESSION['saveddata'] на каждой итерации. может быть, вы имели в виду что-то вроде

  $_SESSION['saveddata'][] = $row; 

это имеет смысл для $atid = $_SESSION['saveddata']['autotaskid'];

Просмотрите настройки сеанса. У вас есть полный список:

 <?php phpinfo(); ?> 

Прокрутите вниз до таблицы «Сессия».

В частности, убедитесь, что каталог session.save_path существует и доступен для записи.

Когда с каждым запросом создается новый идентификатор сеанса, скорее всего это проблема с вашими путями сеансов (save_path и cookie_path), и шансы на это больше, если вы размещаете разные приложения на одном сервере (общий хостинг), а некоторые из них эти приложения также выполняют сеансы. Это приводит к конфликтам в вашем каталоге / tmp. Вы можете изменить конфигурацию своего ini-файла, но лучше всего настроить эти параметры во время выполнения.

 session_set_cookie_params(0, "/app", ".domain.com");//set session cookie parameters session_save_path("/home/../public_html/app/sess");//set directory of this app's session data session_start();//start session 

Надеюсь, это поможет всем, у кого есть эта проблема. #CodeOn