PHP + данные сеанса теряются - PullRequest
2 голосов
/ 27 июня 2011

У меня действительно странная проблема.У меня есть поисковая система, основанная на сессии.

По неизвестной причине переменные сеанса теряются после перезагрузки третьей страницы.

Вот конфигурация PHP:

session.auto_start  On  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   no value    no value
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  100 100
session.gc_maxlifetime  1440    1440
session.gc_probability  1   0
session.hash_bits_per_character 5   4
session.hash_function   1   0
session.name    PHPSESSID   PHPSESSID
session.referer_check   no value    no value
session.save_handler    files   files
session.save_path   /var/lib/php5   /var/lib/php5
session.serialize_handler   php php
session.use_cookies On  On
session.use_only_cookies    On  Off
session.use_trans_sid   0   0

Есть ли у вас какие-либо идеи по устранению этой проблемы?

Ответы [ 2 ]

1 голос
/ 28 июня 2011

Сначала я бы проверил, существует ли перенаправление на https, так как это случай потери сеанса .

Я бы удостоверился в наличии exit (); после перенаправления.

Я также попытался бы отключить * session.auto_start * в php.ini, запустить сеанс в коде и поместить этот файл cookie сеанса в каталог / tmp i /o /var/lib/php5.

Затем я сначала посмотрю на данные $ _SESSION в различных кодовых точках с помощью простого var dump .

И, наконец, выможет отслеживать изменения файла сеанса, используя inotify , объединяющий исследования двух файлов: один просматривает cookie-файл сеанса, а другой настраивается в вашем php-коде, так что вы можете проверять оба рядом.

Для дистрибутива Debian, если вы создадите временный файл в каталоге / cookie в вашем php-коде в стратегической точке (точках), а ваш файл cookie сеанса будет сохранен в вашем каталоге tmp:

# make sure the linux kernel > 2.6.13 and update it if not the case
uname -a
# install inotify
aptitude install inotify-tools
# run inotify in command line just before running your php code
inotifywait -m -r --format '%f : %e' -e modify -e move -e create -e delete /tmp /cookie | while read line;do echo $(date '+%H:%M:%S') ;done;
0 голосов
/ 13 сентября 2011

если вы позвоните session_unset('key1') и $_SESSION['key1'] не существует, вы потеряете все данные решения:

if(isset($_SESSION['key1']){
    session_unset['key1'];
}
...