研究了老半天終於搞懂了,來做一下簡單的筆記
從.NET 2.0開始就已經開始實行的Form驗證模式,今天拜讀了保哥的「概略解釋 Forms Authentication 的運作」後測試的簡單心得
使用這個方法即表示驗證成功,這個驗證會記錄在電腦的cookie當中
1
| FormsAuthentication.RedirectFromLoginPage(strUsername, false);
|
但如果你想要關閉瀏覽器時就登出,你就得改用以下方式將cookie記錄在web browser當中
1 2 3 4 5 6 7 8
| FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, username, DateTime.Now, DateTime.Now.AddMinutes(30),false, userdata, FormsAuthentication.FormsCookiePath);
string encTicket = FormsAuthentication.Encrypt(ticket);
Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, encTicket));
|
那如果又要實作,記住我xx天不用重新登入的功能呢?
1 2 3 4 5 6 7 8 9
| if (bool.Parse(remember)) { HttpCookie cookie = new HttpCookie("rememberme"); cookie.Value = SysHelper.enCrypt(account); cookie.Expires = DateTime.Now.AddDays(3); Response.Cookies.Add(cookie); }
|
這樣下次登入的時候只要判斷這個cookie存不存在就可以放行了!!
1 2 3 4 5 6 7 8 9 10 11 12 13
| if (!User.Identity.IsAuthenticated) { if ( Request.Cookies["backend"] != null) { passTicket(SysHelper.deCrypt(Request.Cookies["rememberme"].Value), ""); return Redirect("/backend"); } return View(); }
|
登出
1 2 3 4 5 6 7 8 9 10 11
| FormsAuthentication.SignOut(); if (Request.Cookies["backend"] != null) { HttpCookie myCookie = new HttpCookie("backend"); myCookie.Expires = DateTime.Now.AddDays(-1d); Response.Cookies.Add(myCookie); } return Redirect("/backend");
|
最後不要搞混Response與Request了。我寫的時候沒注意到害我Debug超久的….(汗)