2012-11-13 198 views
3

有人可以向我解釋如何ASP.NET窗體身份驗證的作品,因爲我似乎並沒有得到它,我不斷簽出。ASP.NET窗體身份驗證到期

現在,我有用戶名,密碼和「保持我登錄」複選框。從這些數值我創建了一張票,餅乾,具體如下:

// Create ticket 
    FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1,email,DateTime.UtcNow,DateTime.UtcNow.AddMinutes(30),remember,String.Empty); 

    // Encrypt ticket 
    string cookie_contents = FormsAuthentication.Encrypt(ticket); 

    // Create cookie 
    HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName,cookie_contents); 

    if (remember) { 
     cookie.Expires = DateTime.UtcNow.AddDays(90); 
    } 

    cookie.Path = FormsAuthentication.FormsCookiePath; 
    cookie.Secure = true; 

    // Add cookie to response 
    Response.Cookies.Add(cookie); 

我希望這個代碼,我可以登錄我的網站,假設我選中「保持登錄」我保持登入至少90天?

但是我所看到的是我在初始登錄後至少30分鐘後退出(這是爲票證預留的時間?)。

Cookie到期和票據到期有什麼區別,我如何保持自己的簽名。我是否需要將90天的時間設置爲cookie和票?

回答

14

如果可以避免,請勿直接操作cookie。您可以使用FormsAuthentication.SetAuthCookie(username, persistent)來簽署用戶。此處的持久性表示「不使用會話cookie」。

您應該然後指定web.config中的cookie的有效期

<system.web> 
    <authentication mode="Forms"> 
      <forms timeout="50000000" slidingExpiration="true"/> 
    </authentication> 
</system.web> 

下,其中滑動到期意味着該cookie將被更新爲每個請求。超時以分鐘爲單位,這樣的例子是相當高的:)

看看這個問題,並鏈接到斯科特谷的博客:Forms Authentication Cookie Expiration

+0

什麼cookie.Secure使用SSL?我已經爲表單標籤添加了requireSSL。另外slidingExpiration更新活動,但沒有活動呢?即我將關閉瀏覽器並稍後回來...... – Lloyd

+0

yes requireSSL =「true」在上面的標籤中將使其成爲一個安全的cookie。另一個好用的標籤是enableCrossAppRedirects =「false」 – MikeSmithDev

+1

好吧我想我已經明白了,將超時設置爲30天這樣的瘋狂事件,並且滑動到期應該照顧剩下的事情+如果在該時間段內沒有登錄,則過期。 – Lloyd

相關問題