0

好吧,我已經分配了在登錄頁面上使用的身份驗證。我一直在研究這一段時間,並決定清理它。我遇到的問題是其中沒有拋出異常,沒有產生錯誤,並且一切都看起來不錯的問題之一,但是當你嘗試使用某個函數時,它會返回一個你不想要的結果。當包含HttpCookie子項或未加密時,IsAuthenticated始終爲false

我使用的代碼看起來非常相似,從這個頁面代碼:

FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, 
    username, 
    DateTime.Now, 
    DateTime.Now.AddMinutes(30), 
    isPersistent, 
    userData, 
    FormsAuthentication.FormsCookiePath); 

    // Encrypt the ticket. 
    string encTicket = FormsAuthentication.Encrypt(ticket); 

    HttpCookie myCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket) 

    // Create the cookie. 
    Response.Cookies.Add(myCookie); 

所以,如果我登錄:

http://msdn.microsoft.com/en-us/library/system.web.security.formsauthenticationticket.aspx

我已經從我的項目中的演示中使用的代碼中,一切正常,下面的代碼計算結果爲true: HttpContext.Current.User.Identity.IsAuthenticated;

不過,如果我希望包括子項使用任一版本的myCookie:

myCookie.Values.Add("userName", "patrick"); //version 1 
    myCookie.Values["userName"] = "patrick"; //version 2 

然後添加到Cookies集合:

Response.Cookies.Add(myCookie); 

請登錄後刷新頁面:

//This always set to false even after successful log on 
    HttpContext.Current.User.Identity.IsAuthenticated; 

不知道爲什麼!

我想幹的事,我沒有加密值添加到立即的HttpCookie:

//IsAuthenticated doesn't work = false 
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormCookieName); 
cookie.Values.Add("encryptTicket", encTicket); 

這只是奇怪,添加子項根本就不工作。而且我爲了讓它工作而被迫加上一張票。我的意思是,IsAuthenticated始終是false,登錄並驗證或不驗證。任何人都可以嘗試解釋這是怎麼回事?我有一個工作解決方案,但任何見解都會有所幫助。

回答

0

好吧,我想到了這一點。這是因爲我的web.config是爲表單身份驗證設置的。使用表格標籤。

FormsAuthenticationTicket查看該標籤的具體信息,如果我沒有創建一個cookie,它不會對我進行身份驗證。這也被默認爲UseCookies的無Cookie模式。

但無論如何,在我創建一個cookie之後,我就會進行身份驗證,然後爲我創建一個新的會話。之後,我可以提供任何我想要的額外餅乾,並讓網站根據需要使用它們。但只要AuthCookie(在我的情況下爲.ASPXAUTH)有效,我的身份驗證會話也是如此。

事實上,當我試圖讓cookie會話在瀏覽器關閉時結束時,通過將Cookie的過期日期設置爲MinValue和票據,我無法進行身份驗證!我必須使票證持續時間超過實際的cookie,以便票證在cookie執行之前不會過期。

票據信息實際上是一種用於製作cookie的配置,在創建cookie之後,瀏覽器定義了cookie的使用方式。

相關問題