2010-12-05 2 views
3

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

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

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

Был ли то же самое с интернет-исследователем, и теперь есть 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 

UPDATE - Решение

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

+0

Я снова прочитал ваш вопрос, и я заметил, что тема не соответствует содержимому. Вы должны уточнить, в чем заключается ваша проблема: не сохраняются ли значения в сеансе или они не извлекаются из базы данных в первую очередь. – 2010-12-05 12:23:05

+0

обновил мою тему – iamjonesy 2010-12-05 13:42:19

+0

обновил мой ответ – aib 2010-12-05 13:50:10

ответ

4

Мое предложение от your previous question еще стоит: пожалуйста, сравните идентификаторы сеансов.

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

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

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

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

1

здесь смысл в

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

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

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

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

+0

спасибо, что в стороне, хотя, почему мои переменные сеанса не поддерживаются на разных страницах? Я обновил свой вопрос с дампами var на странице, которая устанавливает сеанс и другую страницу. – iamjonesy 2010-12-05 11:59:40

3

Вы звоните session_start() на каждой странице, что доступ к данным сеанса?

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

+0

У меня есть session_start() на каждой странице. Это было нормально, пока он не прекратил сеансы сохранения. – iamjonesy 2010-12-05 12:43:27

1

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

<?php 

phpinfo(); 

?> 

Прокрутите страницу до "Сессии".

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

0

Когда с каждым запросом создается новый идентификатор сеанса, скорее всего, это проблема с вашими путями сеансов (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

Смежные вопросы