簡體   English   中英

單擊PHP中的后退按鈕后檢測頁面重新加載

[英]Detecting page reload after clicking back button in PHP

我正在尋找一種方法來檢測單擊“后退”按鈕后何時重新加載頁面,以便可以有選擇地忽略錯誤。 讓我解釋一下原因:

想象一下一個頁面,其中顯示了一些由ID標識的數據:

/show/some/data?id=5

最初,該ID存在並顯示頁面。 如果該ID不存在,則會顯示一條錯誤消息並記錄一條錯誤,因為這不應該發生,並且會指示應用程序中的鏈接已斷開。

現在想象用戶查看數據,決定刪除它,然后刪除后,使用“后退”按鈕再次轉到同一頁面(順便說一句,這不是一個假設,我已經在我的應用程序中看到了)。 現在,該ID不再有效,從而觸發錯誤。 如果在使用后退按鈕之后可以區分初始頁面加載和第二頁面加載,那么我的錯誤處理可能會更寬松。 我的理由是,應用程序中斷開的(轉發)鏈接是一個致命錯誤。 單擊后(最初沒有鏈接時)后斷開的鏈接很可能是由用戶在此期間執行的某些操作引起的。 在那種情況下,我寧願將用戶重定向到概述頁面,也不顯示應用程序錯誤。

我相信解決此問題的一種方法是將一些隨機生成的ID附加到網址:

/show/some/data?id=5&rnd=<?php print rand(); ?>

並記錄會話中已使用的隨機ID。 如果id重復一次,我可以假定頁面已重新加載,並有選擇地忽略一些錯誤。

但是,這將需要更改應用程序中的許多鏈接。 我還可以使用javascript / jQuery將頁面上的所有鏈接更改為相同的效果:

$("a").attr('href', function (i, h) {
    return h + (h.indexOf('?') != -1 ? "&" : "?") + "rnd=" + Math.random ();
});

這種方法的侵入性較小,但是在解決這種看似微不足道的問題上仍然費力。 我想知道是否有或者可以有一個獨立的方法來做到這一點。 后端應用程序是否有任何方法可以區分是通過向前單擊鏈接加載頁面還是單擊返回后重新加載頁面? 還是用javascript有更優雅的解決方案?

對於這種情況,沒有完美的解決方案,因為您試圖(某種程度上)改變瀏覽器的行為。 我能想到的最簡單的想法是設置帶有已刪除頁面列表的會話變量,然后在刪除頁面上將頁面ID推入其中。

然后,您需要更新錯誤處理程序,以另外檢查在已刪除頁面列表中是否存在所請求的頁面ID。 這樣一來,您完全不必弄亂URL。

這是一個示例流程:

  • 用戶請求頁面ID 1
  • 應用程序檢查數據庫,它不存在
  • 應用檢查會話,它不在已刪除頁面列表中
  • 顯示錯誤消息,服務器上記錄了錯誤
  • 用戶請求頁面ID 2
  • 應用程序檢查數據庫,數據庫是否存在,向用戶顯示頁面
  • 用戶單擊刪除按鈕
  • 頁面ID添加到已刪除頁面的會話列表中,並且該頁面被刪除
  • 用戶返回(或手動輸入網址,這是一項額外功能)
  • 應用程序檢查數據庫,ID 2不存在
  • 應用檢查會話,ID 2 IS在已刪除頁面列表中
  • 顯示錯誤消息,未記錄任何錯誤

您還可以更進一步,並跟蹤所有訪問過的頁面,因此,您會知道,如果幾分鍾前有東西出現了,而現在卻沒有,則用戶必須刪除了它。 如果需要,這將允許您處理更多此類事件。

暫無
暫無

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

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