2014-04-10 22 views
0

在web.config編輯登錄用戶需要重新登錄後,我在asp.net mvc web應用程序中注意到了。我知道任何web.config更改都會導致應用程序池循環,並且會有幾秒鐘的停頓時間。我也知道會話狀態被終止,但我們並沒有將它用於持久變量存儲。經過身份驗證的用戶需要在web.config編輯後重新登錄才正常嗎?

但我很好奇爲什麼用戶需要重新登錄?會話狀態是否與認證綁定?表單身份驗證票證仍然有效。有任何想法嗎?

var ticket = new FormsAuthenticationTicket(
      1, 
      user.Email, 
      now, 
      tokenExpire, 
      false, 
      user.Email, 
      FormsAuthentication.FormsCookiePath); 

     var encryptedTicket = FormsAuthentication.Encrypt(ticket); 

     var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket) 
      { 
       HttpOnly = true, 
       Expires = tokenExpire, 
       Secure = FormsAuthentication.RequireSSL, 
       Path = FormsAuthentication.FormsCookiePath 
      }; 
+0

我認爲Session突然被拋棄了。 – Nanosoft

+0

@Nanosoft謝謝,我更新了這個問題。那麼這是否意味着如果會話被殺死了他們的驗證cookie到期? – NullReference

回答

1

這是正常的身份驗證的用戶將需要後 web.config文件編輯在重新登錄?

不是。但是,對認證票據失效有間接影響。

首先,編輯的Web.config觸發待循環應用程序池,這間接導致如果不是set as static in your Web.config

在machineKey中的鍵在FormsAuthentication.Encrypt()FormsAuthentication.Decrypt()方法中使用的machineKey被自動生成。由於在應用程序池回收後machineKey具有新值,因此FormsAuthentication.Decrypt()不會爲您提供正確的票據。因此用戶沒有被認證,並且將被重定向到登錄頁面。

所以,我的建議是設置靜態machineKeys而不是自動生成的鍵。您可以按照here的說明在Web.config中添加一個節。

希望這回答了你的問題。

+3

即使您可以修復machineKey,應用程序池重新啓動也會清除進程內會話狀態。如果您的應用程序依賴於會話狀態,請準備好刪除會話變量。 –

+0

是的,正確的。如果您未處理空值(無論您使用的是會話變量),那麼經過身份驗證的用戶將看到錯誤 – Sam

相關問題