2012-03-05 227 views
1

我有一個頁面,我需要檢查cookie的存在,然後執行重定向。保存狀態的選項

我已經編寫了代碼(ASP.NET)來檢測cookie並執行重定向。僞代碼:

HttpCookie myCookie = Request.Cookies.Get("theCookie"); 
if(myCookie == null) 
{ 
myCookie = new HttpCookie("theCookie","myValue") 
response.Redirect("page.aspx"); //Redirect to check for the presence of the cookie 
} 

More code... 

當用戶啓用了Cookie,這個方法工作得很好。然而,當他們禁用cookie時,他們會陷入無限循環(頁面嘗試創建cookie,重定向,看不到cookie,然後再次重定向,無限次地)。大多數人類用戶可能會很好,但是這可能會在網站的搜索引擎優化評級上做一些數字。

我已經挫敗了我的大腦尋找解決方案,並且由於cookie不存在問題,因此會留下視圖狀態和querystrings。

因爲我必須做一個重定向,我認爲我卡住querystrings。問題是爲了檢測一個頁面是否已經被擊中,我需要追加一個查詢字符串來防止再次踢入重定向。

任何人都可以想出一種方法來實現這一點(防止重定向),而不使用cookie,viewstate或querystrings?我認爲答案可能不是......

回答

3

以您所描述的方式使用查詢字符串是正確的解決方案。

0

編輯:貌似不好主意 - 查詢字符串是方法。保持參考:本地存儲以及腳本可以禁用,所以在設計任何客戶端檢測邏輯時需要考慮。


您也可以嘗試使用本地存儲在瀏覽器以防止無限重定向。它可以讓你從「?isCookie = true」查詢字符串保持網址清潔。請注意,您需要啓用JavaScript。如果你擔心cookie,你應該擔心JavaScript禁用。

+1

只是想知道本地存儲是否會最終成爲可以被禁用的東西,就像cookies一樣。 – Oded 2012-03-05 19:23:18

+0

我這麼認爲。此外,如果有業內人士瞭解本地存儲,首先我會感到驚訝。Cookie和JavaScript通常被稱爲「邪惡」,因此人們可能會努力禁用它們。 – 2012-03-05 19:40:11

0

彼時我做什麼(如果別人試圖此)使用幾個技巧是:

  • 設置了其價值的ASP.NET隱藏字段控制設置爲false(默認 - 餅乾禁用)
  • 使用客戶端腳本檢查是否啓用了Cookie
  • 如果Cookie被設置,則Cookie被啓用。在這種情況下,我使用jQuery調用將隱藏字段的值從false更改爲true
  • 服務器端,如果隱藏字段的值爲true,則頁面會執行重定向。否則,它只是繼續處理頁面。

如果用戶禁用Javascript,隱藏字段的值仍然爲false,因此該頁面仍然只呈現一次。

謝謝你讓我談論它,讓我思考!