我正在使用ASP.NET登录控件。我希望能够为每个用户单独设置表单身份验证的超时(而不是在web.config中全局设置)。根据我的理解,唯一的方法是手动设置AuthenticationTicket的超时。使用登录控件时有没有办法做到这一点?在我看来,登录控件抽象了所有这一切。我希望有一些方法可以继续使用Login Control,但也可以为每个用户单独设置FormsAuthentication超时。
谢谢, 科里
答案 0 :(得分:7)
MSDN says:
LoggedIn事件在之后引发 验证提供程序检查 用户的凭据和 身份验证cookie排队 发送到下一个浏览器 响应。使用LoggedIn事件 提供额外的处理,例如 访问每用户数据后 用户已通过身份验证。
所以这个活动似乎是替换cookie的正确场所。首先,需要检索和解密cookie:
HttpCookie authCookie = Response.Cookies[FormsAuthentication.FormsCookieName];
FormsAuthenticationTicket oldAuthTicket =
FormsAuthentication.Decrypt(authCookie.Value);
此后,应创建基于刚提取的新身份验证票证:
FormsAuthenticationTicket newAuthTicket = new FormsAuthenticationTicket(
oldAuthTicket.Version,
oldAuthTicket.Name,
DateTime.Now,
DateTime.Now.Add(timeoutForUser),
oldAuthTicket.IsPersistent,
oldAuthTicket.UserData,
FormsAuthentication.FormsCookiePath
);
timeoutForUser
这是一个TimeSpan
值,用于保存用户的会话超时。
最后,响应中的旧cookie应替换为新的cookie:
string encryptedTicket = FormsAuthentication.Encrypt(authTicket);
authCookie =
new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
HttpContext.Current.Response.Cookies.Set(authCookie);
这应该可以解决问题。
答案 1 :(得分:2)
登录控件包含LoggingIn
和LoggedIn
个事件,您可以使用这些事件自行处理身份验证。
您可以通过设置LoggingIn
取消e.Cancel = True
事件中的登录过程,然后使用新的new FormsAuthenticationTicket(...)