我正在使用FormsAuthentication,并且在延长有效期方面遇到了麻烦
本文关键字:有效期 方面 麻烦 遇到 FormsAuthentication | 更新日期: 2023-09-27 18:16:33
我正在构建一个web应用程序(框架4.6),并使用FormsAuthentication来管理安全性。
目前,它允许用户登录/注销等…一切都很好。但是,我想定期检查Forms Authentication Ticket的过期,并弹出一个带有按钮的对话框,用户可以按下该按钮来延长时间。所以我基本上让它工作了,除了当票证更新时,用户基本上被踢出,我不知道为什么。
下面是登录代码:
FormsAuthenticationTicket faTicket = new FormsAuthenticationTicket(1, user.UserID, DateTime.Now, DateTime.Now.AddMinutes(FormsAuthentication.Timeout.Minutes), persistLogin, "");
string cookiestr = FormsAuthentication.Encrypt(faTicket);
HttpCookie ck = new HttpCookie(FormsAuthentication.FormsCookieName, cookiestr);
if (persistLogin)
ck.Expires = faTicket.Expiration;
ck.Path = FormsAuthentication.FormsCookiePath;
HttpContext.Current.Response.Cookies.Add(ck);
这是机票更新代码:
FormsIdentity identity = ((FormsIdentity)HttpContext.Current.User.Identity);
string userID = identity.Name;
HttpCookie cookie = FormsAuthentication.GetAuthCookie(userID, true);
FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(cookie.Value);
FormsAuthenticationTicket newTicket = new FormsAuthenticationTicket(
ticket.Version,
userID,
ticket.IssueDate,
DateTime.Now.AddMinutes(FormsAuthentication.Timeout.Minutes),
ticket.IsPersistent,
ticket.UserData,
ticket.CookiePath);
cookie.Value = FormsAuthentication.Encrypt(newTicket);
if (ticket.IsPersistent)
cookie.Expires = newTicket.Expiration;
HttpContext.Current.Response.Cookies.Add(cookie);
顺便说一下,我对剩余时间的处理方式如下(在ashx处理程序文件中):
FormsIdentity identity = ((FormsIdentity)HttpContext.Current.User.Identity);
DateTime expires = identity.Ticket.Expiration;
// offset the expiry time by a few seconds, because otherwise the FormsAuthentication will prevent this Handler from executing
expires = expires.AddSeconds(-5);
TimeSpan ts = expires - DateTime.Now;
double mins = ts.Minutes;
double secs = ts.Seconds;
string countdownText = mins.ToString().PadLeft(2, '0') + ":" + secs.ToString().PadLeft(2, '0');
由于您正在重新签发票证,因此将签发日期设置为当前日期可能是有意义的->
FormsAuthenticationTicket newTicket = new FormsAuthenticationTicket(
ticket.Version,
userID,
DateTime.Now,//ticket.IssueDate
DateTime.Now.AddMinutes(FormsAuthentication.Timeout.Minutes),
ticket.IsPersistent,
ticket.UserData,
ticket.CookiePath);