2011-04-05 82 views
2

我負責提出一種方法,通過使用後退按鈕(意味着他們離開我們的網站並返回)來確定一個人是否已經到達我們的網站,如果是,則將其註銷。阻止人們返回網站?

我想出了一些選擇,但我想知道我可能會失去什麼其他選項。僅供參考,我們確實有一個會話狀態,所以在服務器端我們需要長時間缺席,但他們希望在客戶端進行額外的檢查。

選項1:通過onunload設置烹飪,過期時間爲x秒。在我們網站的每一頁上,我檢查了上述cookie。如果存在,我認爲他們來自我們網站上的另一個頁面,什麼都不做。如果它不在那裏,我認爲它們已經離開我們的網站超過了x秒,並且重定向了。 Con:運行OS5的Blackberry設備不支持onunload。選項2:與#1相同,但不是設置cookie onunload,而是在每次點擊每個鏈接時都將其設置爲轉到我們網站上的其他頁面。 con:messy

選項3: 檢查我們網站每頁上每個負載的瀏覽器歷史記錄。如果以前的網址不是我們的網址,我們會將其註銷。缺點:瀏覽器支持? 由於安全性,它看起來像上一個/下一個歷史對象現在在現代瀏覽器中被阻止。選項4:通過JS,每隔x秒檢查一次cookie。如果存在,請將其重置爲在x秒內過期。如果不在那裏,假設他們已經從其他地方回來了。答:不知道是否在頁面可能位於後臺(應用程序在iPhone上切換或在桌面瀏覽器中使用不同的選項卡)時設置JS cookie。

我應該考慮的其他選項?有沒有一種「適當」的方式來處理這個問題?這只是抓住了試圖阻止瀏覽器正常行爲的吸管?

+0

我對這方面的其他一些探索感興趣。我已經看到一些有趣的Javascript與cookie和其他與AJAX會話檢查。 – tamarintech 2011-04-05 18:55:30

+4

選項5:放棄。儘管如此,選項1和選項2有明顯的缺陷(互聯網的間歇性特徵之一),但考慮到事實上的標準是現在選項卡式瀏覽,選項3會被排除在外,選項4也是如此只是簡單的愚蠢。除此之外,還有什麼其他的東西可以抓住吸管,擊敗一匹死馬 - 無論委婉說法如何,它們在這種棘手的情況下都會帶來麻煩。 – 2011-04-05 18:58:30

+0

我應該給更多的上下文。這主要是針對移動設備的。因此,由於網絡滯後,我們不會採用AJAX路線。不過,標籤式瀏覽是一個問題,就像移動Safari一樣。 – 2011-04-05 19:01:13

回答

1

您可以將當前頁面名稱/動作/標識符保留在會話變量中,然後使用javascript onChange/load/keyup/keydown從服務器請求用戶的當前狀態。如果不匹配,則重定向或以其他方式阻止他們查看當前頁面。

這是我用過的一種方法,但它有缺點......例如,當用戶使用後退按鈕時,onload並不總是工作。 OnChange等在某些表單領域絕對有效。定時器也非常簡單,但是快速用戶無論如何都可以通過頁面獲得輸入。

+0

我們試圖避免碰到服務器來與會話狀態進行比較。所以,是的,我們有點想做不可能的事情。 ;) – 2011-04-05 19:02:01

+0

@DA - 你已經使用會話來調整服務器了,所以增加一個檢查有什麼大不了的? – StingyJack 2011-04-05 19:03:51

+0

服務器越少,我們在某些移動設備/網絡上的網絡延遲就越多。 – 2011-04-05 19:04:54

0

這不是那麼複雜......使用JavaScript歷史對象

history.next給你的頁面的前進按鈕的完整網址。一個簡單的正則表達式可以判斷它是否來自你的域。

我只是不知道它是否支持所有瀏覽器

+0

看起來像現代瀏覽器阻止訪問瀏覽器中的下一個/上一個歷史記錄對象,這從安全POV是非常有意義的。所以,把它從選項列表中刪除。 – 2011-04-05 20:24:20