2016年3月21日 星期一

ASP.NET 在 Redirect 之後 Session 遺失(Session lost after redirected)

2013年曾寫了一篇關於「保護 Cookie 的安全(Secure 與 HttpOnly)」的博文,原由是Web系統進行黑箱掃描時,出 [加密的階段作業 (SSL) Cookie 中遺漏安全屬性] 的弱點,在 .Net 2.0 之後,這個問題可以透過 Web.config 中加入「<httpCookies httpOnlyCookies="true" requireSSL="true" />」(在<system.web>區段內)來增加安全性。
但啟用<httpCookies httpOnlyCookies="true" requireSSL="true" />後,進行Debug時會發現使用者經Login.aspx網頁完成登入後,原本將帳號資訊記錄到 Session 之中,並執行FormsAuthentication.SetAuthCookie 將狀態記錄 Cookie,在執行 FormsAuthentication.SetAuthCookie 之後,Session 物件確實已建立,隨者利用 Response.Redirect 轉址到作業的頁面後,又被導回 login.aspx,利用trace 發現轉址到作業頁面時,Session 被成空的。
在網路上找了很多資料,高手建議的解法有:
  • Response.Redirect("work.aspx", false)
  • FormsAuthentication.RedirectFromLoginPage
  • Server.Transfer
這三種都試了,問題依舊,最後是將 <httpCookies httpOnlyCookies="true" requireSSL="true" /> 這一段的 requireSSL="true" 刪除掉問題就不見了。 原來個人開發用的環境沒有啟用 SSL ,遇到 requireSSL="true" 才出問題,如果將測試環境的IIS 之 SSL 啟用,加上 requireSSL="true" 這個屬性也能正常工作。

4 則留言: