2014-10-19 110 views
1

我正在尋找一種方法來檢測單擊後退按鈕後何時重新加載頁面,以便我可以選擇性地忽略錯誤。讓我來解釋爲什麼:在PHP中單擊後退按鈕後檢測頁面重新加載

想象一下,一個頁面,顯示一些數據,由id標識:

/show/some/data?id=5 

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

現在設想用戶查看數據,決定刪除它,刪除後使用後退按鈕重新進入同一頁面(順便提一下,這不是假想的,我已經在我的應用程序中看到過)。現在,該ID不再有效,觸發錯誤。如果在使用後退按鈕後,我可以區分初始頁面加載和第二個頁面加載,我可以在我的錯誤處理中更加寬鬆。我的推理是應用程序中的一個斷開(向前)的鏈接是一個致命的錯誤。點擊後(最初沒有)時,斷開的鏈接很可能是由用戶在此期間採取的某些操作引起的。在這種情況下,我寧願將用戶重定向到概覽頁面,而不是顯示應用程序錯誤。

我認爲要解決這將是一些隨機生成的ID附加到URL的一種方法:

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

和日誌已在會話中使用的隨機編號。如果一個標識符重複出現,我可以認爲該頁面已被重新加載,並有選擇地忽略一些錯誤。

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

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

這對於解決這樣一個看似微不足道的問題稍微創傷小,但仍重手。我想知道是否有或者可以採取獨立的方式來做到這一點。有沒有辦法讓後端應用程序區分頁面是通過點擊某個鏈接進行加載還是在點擊後加載?或者是有一個更優雅的解決方案與JavaScript?

回答

0

因爲您試圖(改變)改變瀏覽器的行爲,所以沒有完美的解決方案。我能想到的最簡單的想法是使用已刪除頁面的列表設置會話變量,並在刪除頁面上將頁面ID推入其中。

然後,您需要更新錯誤處理程序以另外檢查已刪除頁面列表中是否存在請求的頁面標識。這樣你就不必亂搞網址了。

下面是一個例子流程:

  • 用戶請求頁面ID 1
  • 應用程序檢查數據庫,它不存在
  • 應用程序檢查會話,它不是在被刪除的頁面列出
  • 顯示的錯誤消息,服務器上記錄的錯誤
  • 用戶請求頁面ID 2
  • 應用程序檢查數據庫,它存在,顯示給用戶的頁面
  • 用戶點擊刪除按鈕頁面
  • ID添加到刪除頁的會話列表和頁面被刪除
  • 用戶回到(或類型手動的URL,這是一個獎金特點)
  • 應用程序檢查分貝,ID 2不存在
  • 應用程序檢查會話ID 2被刪除的頁面列出
  • 錯誤信息顯示,沒有錯誤記錄

您CA ñ還要進一步追蹤所有訪問過的頁面,以便您知道如果幾分鐘前出現了某種情況,而現在不是,用戶必須已將其刪除。這將允許您在需要時處理更多此類事件。