PHP +会话数据丢失

时间:2011-06-27 19:59:20

标签: php session session-variables

我面临着非常奇怪的问题。我有一个基于会话的搜索引擎。

由于未知原因,第三页重新加载后会话变量将丢失。

这是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 个答案:

答案 0 :(得分:1)

首先,我会检查是否有重定向到https,因为这是session loss的情况。

我确保在重定向后有一个 exit();

我还会尝试在php.ini中关闭* session.auto_start *并在代码中启动会话,并将该会话cookie放入/ tmp目录i / o /var/lib/php5。

然后我会先用简单的 var dump 查看各个代码点的$ _SESSION数据。

最后,你可以使用 inotify 组合2个文件研究来跟踪会话文件的变化:一个查看会话cookie,另一个查看你的php代码,你可以检查两个并排。

对于debian发行版,假设您在战略点的PHP代码中的目录/ cookie中创建一个临时文件,并且您的会话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;

答案 1 :(得分:0)

如果您拨打session_unset('key1')并且$_SESSION['key1']不存在,则会丢失所有数据 溶液:

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