2009-05-27 159 views
6

我在這裏不知所措。我在樓上有一組特定的用戶,他們的會話似乎完全隨機過期。不僅當他們離開網站坐了一段時間,他們在瀏覽時可能會過期。對於我和我們大多數用戶來說,一切正常。這不是一個瀏覽器問題,我們有FF和所有IE版本的人都可以正常工作,FF和IE中的人不起作用。PHP會話意外到期

我的gc_maxlifetime43200和垃圾收集是一個瘋狂的低1/1000(這不應該重要)。是否有可能在服務器上運行其他程序,它正在隨機刪除一些會話?我應該檢查什麼?這仍然無法解釋爲什麼只有這個特定的羣體似乎受到影響。

我有一個從默認的不同的幾個會話設置:

session.gc_maxlifetime = 43200 
session.gc_divisor = 1000 
session.save_path = /var/lib/php/session 
session.use_only_cookies = Off 
session.bug_compat_42 = Off 

前三,我並不擔心,但可以在最後兩個是造成這種現象?我實際上並沒有通過URL發送cookie,所以我沒有理由關閉use_only_cookies。我沒有保證,在我到達這裏之前製作這個應用程序的不合適的人沒有利用bug_compat_42的東西來設置會話變量,但是我希望這個問題不會隨機。

編輯:

在進一步的調查,我發現會話沒有被摧毀了一切,但最終用戶得到一個新的會話ID。舊會話在服務器上仍然存在,但是一個新會話在瀏覽時隨機啓動。

+0

兩種情況之一發生的事情:在服務器上的會話文件被刪除,或者會話cookie到期。我試圖隔離一個或另一個發生的情況,然後從那裏開始工作。 – 2009-05-27 16:33:55

+0

我確定它不是被刪除的會話。我如何檢查cookie是否過期? – 2009-05-27 21:33:16

回答

5

問題在於,他們的瀏覽器會將session cookie設置爲過期失效。我已經解決了這個骯髒,骯髒的黑客問題,你永遠不應該使用它。我並不爲此感到驕傲,但如果這照亮任何東西,隨意讓我進入:

if (!headers_sent()) { 
    if ($_COOKIE["PHPSESSID"] != "") { 
     setcookie("PHPSESSID", $_COOKIE["PHPSESSID"], time()+43200, "/", ".mydomain.com"); 
    } 
} 
1

你能提供一些關於你的設置的更多信息嗎?

我的第一個想法是,有什麼東西隨機清理你的臨時文件目錄。如果您使用的是標準LAMP,PHP會將會話數據文件存儲到/ tmp中。如果他們在清理過程中被刪除,則會丟失會話。

編輯:我正在重新考慮這個。如果只有一組特定的用戶受到影響,那麼這樣做的可能性就會降低。

Cookie設置如何?我會確保這些人沒有使用類似動態代理的東西,並且您的Cookie正在爲您的網站的根域設置。他們是否有可能將一些隱私清潔軟件(例如CCleaner)設置爲可能會刪除他們的Cookie的計劃任務?

我會在其中一臺計算機上啓動並將Firebug放到其中一臺Firefox機器上,並檢查HTTP請求以查看cookie是否正確發送。

+0

正如我所說,我已經考慮過這個選項,但我不認爲這會產生我得到的行爲。如果有人正在清理會議,我希望每個人都能同時註銷。相反,我只有一小部分人隨機註銷。 有關設置的其他信息會有幫助嗎? – 2009-05-27 16:01:36

1

我會在這些機器上安裝一些http嗅探器,如httpwatch(支付但是值得每一分錢)或fiddler(免費),看看會話cookie發生了什麼(我認爲它是PHPSESSID,但不確定)。如果Cookie由於代理,奇怪的apache配置或者其他原因而在會話中被刪除或更改,這將是檢測它的最佳方式。

1

我知道這已經很晚了。但也適用於有同樣問題的人。

[如果你加密和解密數據]

我這個問題跑,把我一段時間來弄清楚什麼問題。 它一直爲同一用戶創建一個新的會話ID。原來,加密數據和解密數據是不一樣的。 解密數據返回一些額外的空格。 從數據庫或任何您使用的存儲發送和返回時,請檢查您的數據值。

0

在我的項目中,一個庫用於保護會話,有時我觀察到我的會話突然被破壞。

https://github.com/ezimuel/PHP-Secure-Session/blob/master/SecureSession.php

首先,我想噸知道什麼是該庫的目的,我們可以從php.ini文件以及這些設置。

KEY _...一個新創建的KEY的用法是什麼。

當我使用的print_r裏面的open(),我得到下面的示例結果

Hqx_SecureSession Object 
(
    [_debug:Hqx_SecureSession:private] => 
    [_key:protected] => 5ò™6žÝ°rIÐß'k Êii07ÀtCzª[email protected]ü¸"‡ÄCžA¼ÿ£g{IP 
    [_path:protected] => c:\hqp\xampp_1.7.4\tmp\ 
    [_name:protected] => PHPSESSID 
    [_ivSize:protected] => 16 
    [_keyName:protected] => KEY_PHPSESSID 
    [_cookieParams:protected] => Array 
     (
      [lifetime] => 7200 
      [path] =>/
      [domain] => dev.autoquotes.insurance.com 
      [secure] => 
      [httponly] => 1 
     ) 

    [_sessionId:protected] => 
    [_logger:Hqx_SecureSession:private] => 
) 
htq827r4rjh9ob05nhlqb8vmd5ai52djb0bd0l42vk9un26df541c:\hqp\xampp_1.7.4\tmp