簡體   English   中英

PHP用戶會話變得“混亂”

[英]PHP User Sessions Getting 'Muddled'

我遇到麻煩的應用程序是一個通用的Web應用程序……它處理用戶的方式沒什么特別的。 也就是說,我在會話變量中處理用戶信息,並通過cookie管理會話。

我的一個客戶遇到了一個問題,即用戶登錄后會不時向他們顯示不同用戶的頁面(這很容易確定,因為用戶名位於每個頁面的頂部)。 如果他們單擊“主頁”鏈接,顯然一切都很好。

現在,就我的PHP知識而言,將需要花費一些精力來混合這種東西,對嗎? 我無法在我們的任何開發環境中復制該問題,就我而言,就像我說的那樣,要真正“共享”這種會話信息需要一定的努力...

所以我的問題是:可能出現什么問題? 每次我遇到此問題都是由於“行為不當”的代理服務器,盡管他們告訴我他們沒有代理請求。

還有其他我可能會想念的東西嗎? 還有其他可能的原因(自然這可能包括我的代碼有問題)?

謝謝...

聽起來,即使您的客戶向您保證不是,但對我來說,這仍然像是代理或緩存問題。 如果有可能,您可以在用戶字段附近的某個位置生成頁面時添加類似時間戳的內容,以確保請求是最新的。

這樣,如果頁面混亂了,就可以指示頁面是否是較早生成的並由途中的東西存儲。 如果您的ajax結果由瀏覽器緩存,並且您的客戶端在同一Web瀏覽器上有多個人,則不需要代理即可獲得古怪的結果。

解決該問題的另一種方法是,記錄來自客戶端的請求,並檢查是否錯過了任何內容。 如果您回放請求,是否得到相同的結果?

您是否可以驗證當您以用戶A的身份登錄並“錯位”了您的會話cookie(刪除它)后,是否還能獲得所需的信息? 如果是這樣,則身份驗證的處理方式可能有問題。

希望這可以幫助!

因此,事實證明, 這種情況的最終結果至少是相當奇怪的。

事實證明,客戶端正在使用手持計算機訪問該應用程序,並讓電池沒電了。 然后,該特定設備將時鍾重置為2005年,最終為電池充電,這似乎導致瀏覽器從其緩存中讀取了某些頁面。

正確設置設備時鍾后,問題就消失了。

感謝所有建議:我討厭嘗試調試這些緩存類型問題。 不過,我想我確實應該添加一些頭文件,以嘗試停止這些手持設備緩存數據。

您可能需要考慮進行某種會話驗證,例如將IP地址存儲在會話中,如果會話中的地址與當前用戶的IP不匹配,則將其銷毀。

當然,如果不匹配IP,則可以銷毀用戶,而不必銷毀它,而只是強制用戶進行新的會話。 認為類似這樣的方法會起作用:

session_start();

if (isset($_SESSION['ip'])) {
    if ($_SESSION['ip'] != $_SERVER['REMOTE_ADDR']) {
        session_regenerate_id();
        session_destroy();
        session_start();
        $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
    }
} else {
    $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
}

您是否向用戶顯示鏈接中包含會話ID(或其他以會話ID作為參數的請求)?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM