2010-11-03 64 views
2

我有一個PHP的網站,要求用戶登錄後才能訪問除主頁和幾個靜態頁面的其他所有內容的麻煩(關於我們,聯繫我們等)。幾位用戶表示,他們每隔幾分鐘就會使用該網站註銷 - 他們可以登錄,但幾分鐘後會再次顯示登錄表單。我自己無法證實這一點,因爲該網站似乎對我來說工作正常 - 甚至使用相同的瀏覽器,因爲它們和他們的帳戶 - 但我想知道這是否會成爲會話設置的問題?PHP會話的用戶被登出

根據phpinfo()函數,會話配置值:

session.auto_start = Off 
session.bug_compat_42 = On 
session.bug_compat_warn = On 
session.cache_expire = 180 
session.cache_limiter = nocache 
session.cookie_domain = no value 
session.cookie_httponly = Off 
session.cookie_lifetime = 0 
session.cookie_path =/
session.cookie_secure = Off 
session.entropy_file = no value 
session.entropy_length = 0 
session.gc_divisor = 100 
session.gc_maxlifetime = 1440 
session.gc_probability = 1 
session.hash_bits_per_character = 4 
session.hash_function = 0 
session.name = PHPSESSID 
session.referer_check = no value 
session.save_handler = files 
session.save_path = /shared/sessions 
session.serialize_handler = php 
session.use_cookies = On 
session.use_only_cookies = Off 
session.use_trans_sid = 0 

有什麼明顯的錯誤與上面的設置,這可能會導致用戶定期註銷? session.gc_maxlifetime看起來有點低,但是1440秒仍然是24分鐘,並且用戶正在被更頻繁地註銷。我們不檢查用戶的IP作爲會話處理的一部分,儘管辦公室仍然有靜態IP地址。

這是在Debian Lenny服務器上,PHP 5.2.6和Apache 2.2.9。

回答

2

手搖的session.gc_maxlifetime 360​​0似乎已經解決了這一問題(監測一兩個星期後)。我仍然不確定這是否是真正的原因,因爲用戶在2-3分鐘後才被註銷,但對於遇到類似問題的任何人都值得嘗試。

記錄每登錄/註銷函數調用,以便可以(從一個用戶例如大量的登錄而沒有任何註銷呼叫)配對其關閉並發現任何不匹配也是非常有用的。 :)

0

似乎一切正常 - 會話應在1440秒後過期。在用戶訪問的頁面之一中是否有可能調用session_destroy()?或者,也許$_SESSION陣列被改變,用戶因此被記錄?

另外,你是否自己重現了這個問題?用戶通常有一個做大事的習慣。 24分鐘可能似乎總是爲他們:)

+0

我似乎無法確認/重現自己的問題,這是主要的問題,真的 - 如果在一個頁面中(沒有,它只存在於註銷有類似session_destroy() ()函數)我希望它也會影響我。 – pwaring 2010-11-03 15:54:49

0

您是否使用AJAX該網站上的電話?

如果是這樣,已知AJAX調用不會更新會話cookie(至少從我使用CodeIgniter框架的經驗來看,它也使用cookie來創建和傳輸會話),所以即使人們不應該註銷。

它也可能在他們的瀏覽器一些設置 - 手工餅乾過期時間,插件什麼的simmilar。

+0

我在一些頁面上使用AJAX調用,但是他們調用的所有腳本都有一個包含更新會話cookie的公共包含文件。在任何情況下,它們僅用於在頁面上顯示信息 - 任何交互都需要另一個完整頁面加載來更新會話cookie。 – pwaring 2010-11-03 16:03:13

+0

此外,我已經與一些用戶進行了覈對,他們在訪問那些根本沒有AJAX調用的頁面後被註銷。 – pwaring 2010-11-04 13:39:34

+0

你是否檢查了瀏覽器的擴展和Cookie設置? – 2010-11-04 13:45:11