簡體   English   中英

PHP,cookie和快速瀏覽器刷新

[英]PHP, cookies, and rapid browser refresh

對於我的登錄系統,我有一個令牌值,每次驗證發生時都會更改。 每次訪問任何頁面時都會進行身份驗證(通過查找令牌cookie和會話廣告等),以及每次$.ajax調用(我的想法是我希望確保用戶始終進行身份驗證,以及是否進行身份驗證失敗的令牌或系列或其他什么,系統會自動完全注銷)。 在身份驗證過程中,當確定當前會話有效時,會生成一個新令牌,並將該令牌設置為cookie並在MySQL表中更新,如下所示:

$newtoken = hash("sha256", mt_rand());
my_mysqli_query($link, 
                'UPDATE _rememberme SET token = "'.$newtoken.'", lastupdated = "'.now().'" 
                 WHERE series = "'.$series.'" AND email = "'.$email.'"');
setmycookie("token", $newtoken, 7);

當我快速刷新瀏覽器時,它最終導致MySQL令牌和cookie令牌不匹配。 認為問題在於,在快速刷新期間,MySQL表會更新,但隨后會發生刷新,腳本會在更新cookie之前中止。 這會導致將來的身份驗證失敗,因為cookie令牌與MySQL令牌不匹配。

我真的很感激如何讓用戶快速刷新瀏覽器的一些想法。

我已經研究過這個問題,並且在找到解決方案方面收效甚微。

您的解決方案不會增加安全性,並為您的用戶增添了一個令人頭疼的問題。

如果您使用PHP會話 ,則不必依賴多個cookie,也不必在每次訪問時對所有內容進行哈希處理。 准備會話將提高安全性,因為您的用戶將無法更改其會話變量。 Cookie是用戶可修改的,因此您不能盲目信任它們。 但是,用戶可以更改PHPSESSION cookie,但是將會話更改為另一個會話的可能性非常小,幾乎不可能。

使用當前代碼,如果用戶在新選項卡上打開鏈接,並且在請求返回之前打開另一個鏈接,他將被注銷。 cookie將在第一個請求時更改,但在瀏覽器獲取新值之前,用戶會使用舊cookie提交另一個請求。 新值在數據庫上,處理具有舊值的新請求,並且會話無效。 另一個不滿意的用戶感到困惑,因為他被隨機注銷。

暫無
暫無

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

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