2011年11月29日 星期二

[asp.net] 永久登入,延長(自訂)表單驗證(Forms Authentication)保存時間

有些網站會提供記錄使用者登入密碼二週或永久
如pchome的 '記住我的密碼' 、 yahoo的 '保持我的登入狀態'

若使用Login控制項時,可以在Login控制項的LoggedIn事件裡面加入下面的程式碼:

// 使用Login控制項,在成功登入之後會自動幫我們建立驗證的cookie
// 所以我們必須拿出來重新修改,改成我們希望延長的時間
HttpCookie cookie = HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName];

// 從cookie解碼還原票證
FormsAuthenticationTicket oldTicket = FormsAuthentication.Decrypt(cookie.Value);

// 建立新的票證 註:DateTime.Now.AddYears(1)為票證到期日,也就是希望延長的期限
FormsAuthenticationTicket newTicket = new FormsAuthenticationTicket(oldTicket.Version,
oldTicket.Name, DateTime.Now, DateTime.Now.AddYears(1), oldTicket.IsPersistent, oldTicket.UserData, FormsAuthentication.FormsCookiePath);

// 使用新的票證來建立新的驗證cookie
string cookiestr = FormsAuthentication.Encrypt(newTicket);
HttpCookie newCookie = new HttpCookie(FormsAuthentication.FormsCookieName, cookiestr);
newCookie.Expires = newTicket.Expiration;
newCookie.Path = FormsAuthentication.FormsCookiePath;

// 最後將新的驗證cookie重新寫回給user
Response.Cookies.Add(newCookie);

-----完成-----

沒有留言:

張貼留言