我已經到處找在網絡上不工作時,和會話變量的細微之處需要澄清一些對我來說。PHP會話(使用myPajamas登錄腳本)改變網絡
我有一個網站,設置會話變量(我認爲這也將定義會話ID是什麼?不知道如何工作的一個cookie),和所有完美的作品。我在使用手機漫遊(使用wifi)時發現的情況是,只要手機切換wifi網絡,瀏覽器似乎無法再訪問該會話,直到該窗口/標籤關閉並重新打開。
從我讀過以下申請什麼,請說明對我來說:
當瀏覽器窗口關閉時,會話cookie被破壞,因此當我重新打開它,創建一個新的Cookie附到新的會話ID。從而允許會話再次正常工作?
如果網絡切換,服務器將創建一個新的會話ID,但由於瀏覽器窗口未關閉,舊的會話cookie未被銷燬,瀏覽器嘗試操作過期的會話ID(舊的會話cookie包含)?不知道如果這是真的,我已閱讀了這個荒謬的頁數,我找不到任何具體的。但這是我得到的印象。我見過這麼多的警告有關
session_regenerate_id()
,我對其非常緊張......
任何幫助,關於這個細節,或方法來解決這將是非常有益的。我在我束手無策......
UPDATE
我使用的是mypajamas腳本,以方便登錄。會話正常創建。但是,在查看代碼後,我找到了一個爲$_SERVER['REMOTE_ADDR']
和$_SERVER['HTTP_USER_AGENT']
值設置會話變量的位置。然後交叉引用它們以確保它在同一IP上的相同瀏覽器上是同一用戶。這是爲了防止多源攻擊(不可能發生劫持)。問題是使用移動瀏覽器時,或動態IP的IP可以肯定會改變,認證失敗。
我無法相信我能不知道這一點,我花了幾個小時尋找關於會話ID的變化問題。
希望這可以幫助別人,在今後類似的問題。並且對所有閱讀這篇文章的人表示衷心的感謝,您在評論中的指導無疑幫助我解決了這個問題。
編輯的代碼
class.mypajamas.php
來源:
function check_ipau() { // user visits again... but is it really him? check values set above (by get_session())
if($_SESSION['auth'.$this->_unique_id]['ip'] == $_SERVER['REMOTE_ADDR']
&& $_SESSION['auth'.$this->_unique_id]['ua'] == $_SERVER['HTTP_USER_AGENT']) {
// session data is correct -> user did not "change" ip-address or user agent (aka; hijack is unlikely)
return true;
}
else {
return false;
}
}
要:
個function check_ipau() { // user visits again... but is it really him? check values set above (by get_session())
/*if( $_SESSION['auth'.$this->_unique_id]['ip'] == $_SERVER['REMOTE_ADDR']
&& $_SESSION['auth'.$this->_unique_id]['ua'] == $_SERVER['HTTP_USER_AGENT']) {
// session data is correct -> user did not "change" ip-address or user agent (aka; hijack is unlikely)
*/
return true;
/*
}
else {
return false;
}*/
}
你使用直接PHP還是你使用框架?你當前的會話處理代碼是什麼樣的? (或者這不是你的代碼?) – Doon
1.不一定。 Cookie可以設置爲生存任意時間。如果cookie被刪除,那麼會話不見了。 2.我不知道你的意思是「網絡交換」。默認情況下,PHP中的會話數據是服務器上由cookie中的id附加的小文件。物理網絡與它無關。 – Cfreak
它是直接的PHP,沒有框架。我將在此處將會話創建顯示爲更新...首先讓它可讀,然後給我一兩分鐘:) – MaurerPower