2011-06-27 130 views
2

我正面臨真正奇怪的問題。我有一個搜索引擎,基於會話。PHP +會話數據丟失

由於未知原因,會話變量在第三次頁面重新加載後會丟失。

這裏的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 

你有任何想法如何調試這個問題?

+0

我會說,如果會議工作兩次,你的設置就可以了。你有沒有考慮過審查你的代碼? –

+2

我能想到的唯一原因是你沒有開始會話。嘗試使用var_dump或print_r您的會話變量,並查看它們丟失的位置。最近,我剛剛面對這樣的事情,果然我沒有開始我的會議。 –

+0

除了php.ini設置,你應該確保你在你的代碼中啓動了sesison(例如,在你的php頁面開始的時候session_start(),但我想這是完成的)。重新加載頁面時,您是否從http重定向到https - 因爲這是會話丟失的情況? – hornetbzz

回答

1

起初,我會檢查是否有重定向到HTTPS,因爲這是session loss的情況下。

我會確保有一個出口();重定向後的

我也會嘗試關閉php.ini中的* session.auto_start *並在代碼中啓動會話,並將該會話cookie放入/ tmp目錄i/o/var/lib/php5中。

然後,我會首先看一下簡單的var轉儲在不同代碼點的$ _SESSION數據。

最後,您可以使用inotify跟蹤會話文件更改,其中包括兩個文件研究:一個查看會話cookie,另一個查看您的php代碼,以便您可以並排查看。

對於Debian的發行版,假設你在關鍵點(S)和你的會話cookie在您的tmp目錄strored你的PHP代碼中創建目錄/ cookie的臨時文件:

# 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

,如果你打電話session_unset('key1')$_SESSION['key1']不存在你失去了所有的數據 解決方案:

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