2012-03-06 77 views
5

我決定重新寫了一個問題,我發現瞭如何實現上述的一些信息: http://msdn.microsoft.com/en-us/library/aa289495%28v=vs.71%29.aspx如何檢查,如果瀏覽器在Web應用程序中啓用Cookie?

不過,我的問題是,我試圖做的一切,在Page_Load事件的Login.aspx.cs

最初它似乎工作正常,直到我試圖通過輸入我的憑據和單擊登錄按鈕實際登錄。然後所有的地獄破壞,我得到一個無盡的循環。它始終在Login.aspx.csTestForCookies.aspx.cs之間的Page_Loads之間來回切換。 。每次重定向URL增長由另一"?AcceptCookies=1」有一個變通這個

Login.aspx.cs代碼:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     if (Request.QueryString["AcceptsCookies"] == null) 
     { 
      Response.Cookies["TestCookie"].Value = "ok"; 
      Response.Cookies["TestCookie"].Expires = DateTime.Now.AddMinutes(1); 
      Response.Redirect(BasePage.ResolveUrl("~/Common/TestForCookies.aspx?redirect=" + Server.UrlEncode(Request.Url.ToString()))); 
     } 
     else 
     { 
      LoginBox.InstructionText = "Accept cookies = " + Request.QueryString["AcceptsCookies"]; 
     } 
    } 

} 

TestForCookies.aspx.cs代碼:

protected void Page_Load(object sender, EventArgs e) 
{ 
    string redirect = Request.QueryString["redirect"]; 

    string acceptsCookies = null; 
    // Was the cookie accepted? 
    if (Request.Cookies["TestCookie"] == null) 
    { 
     // No cookie, so it must not have been accepted 
     acceptsCookies = "0"; 
    } 
    else 
    { 
     acceptsCookies = "1"; 
     // Delete test cookie 
     Response.Cookies["TestCookie"].Expires = DateTime.Now.AddDays(-1); 
    } 

    string url = redirect + "?AcceptsCookies=" + acceptsCookies; 


    Response.Redirect(url); 
} 
+0

¿你能後的代碼? – 2012-03-07 18:14:11

+0

其實整個代碼都可以在我鏈接到的文檔中找到。 – KoturB 2012-03-08 07:05:12

回答

0

我想我解決了它。由於URL地址格式不正確,重定向沒有正確完成。

Login.aspx.cs

if (!Page.IsPostBack) 
    { 
     if (Request.QueryString["AcceptsCookies"] != null) 
     { 
      if (Request.QueryString["AcceptsCookies"].ToString() == "0") 
      { 
       LoginBox.InstructionText = Resources.Resource.Login10; 
      } 
     } 
     else 
     { 
      Response.Cookies["TestCookie"].Value = "ok"; 
      Response.Cookies["TestCookie"].Expires = DateTime.Now.AddMinutes(1); 

      string url = Request.Url.ToString(); 
      url = url.Replace("ReturnUrl", "AcceptsCookies=&ReturnUrl"); 

      Response.Redirect(BasePage.ResolveUrl("~/Common/TestForCookies.aspx?redirect=" + Server.UrlEncode(url))); 
     } 

    } 

TestForCookies.aspx.cs

string redirect = Request.QueryString["redirect"]; 

    string acceptsCookies = null; 
    // Was the cookie accepted? 
    if (Request.Cookies["TestCookie"] == null) 
    { 
     // No cookie, so it must not have been accepted 
     acceptsCookies = "0"; 
    } 
    else 
    { 
     acceptsCookies = "1"; 
     // Delete test cookie 
     Response.Cookies["TestCookie"].Expires = DateTime.Now.AddDays(-1); 
    } 

    redirect = redirect.Replace("AcceptsCookies=", "AcceptsCookies=" + acceptsCookies); 

    Response.Redirect(BasePage.ResolveUrl(redirect), true); 
} 
+0

這曾經工作,但經過一些與IE隱私設置擺弄我設法打破它。現在儘管有「接受所有cookie」,但我收到錯誤消息,說明Cookie未啓用。令人沮喪! – KoturB 2012-03-21 13:59:36

2

我的登錄頁面上所做的基本上是這些步驟:

  1. 在'登錄'點擊回發到se檢查用戶的憑據。如果登錄成功...
  2. 設置我的cookie併發送JS以單擊一個隱藏的「確認cookie」按鈕回到瀏覽器。這是一個額外的往返行程,但Cookie應該是有效載荷的一部分。
  3. 返回服務器上的'確認cookie'按鈕的處理程序我檢查cookie。如果它在那裏,我們很好,我重定向。如果不是,我發送內容返回說明禁用cookies,並提供關於如何啓用它們的鏈接。

希望這會有所幫助!

相關問題