Cor*_*ett 7 asp.net forms-authentication login-control
我正在使用ASP.NET登录控件.我希望能够为每个用户单独设置表单身份验证的超时(而不是在web.config中全局设置).根据我的理解,唯一的方法是手动设置AuthenticationTicket的超时.使用登录控件时有没有办法做到这一点?在我看来,登录控件抽象了所有这一切.我希望有一些方法可以继续使用Login Control,但也可以为每个用户单独设置FormsAuthentication超时.
谢谢,科里
MSDN 说:
在身份验证提供程序检查用户的凭据并且身份验证cookie排队等待在下一个响应中发送到浏览器之后,将引发LoggedIn事件.在用户通过身份验证后,使用LoggedIn事件提供其他处理,例如访问每用户数据.
所以这个活动似乎是替换cookie的正确场所.首先,需要检索和解密cookie:
HttpCookie authCookie = Response.Cookies[FormsAuthentication.FormsCookieName];
FormsAuthenticationTicket oldAuthTicket =
FormsAuthentication.Decrypt(authCookie.Value);
Run Code Online (Sandbox Code Playgroud)
在此之后,应创建基于刚刚提取的新身份验证票证:
FormsAuthenticationTicket newAuthTicket = new FormsAuthenticationTicket(
oldAuthTicket.Version,
oldAuthTicket.Name,
DateTime.Now,
DateTime.Now.Add(timeoutForUser),
oldAuthTicket.IsPersistent,
oldAuthTicket.UserData,
FormsAuthentication.FormsCookiePath
);
Run Code Online (Sandbox Code Playgroud)
timeoutForUser这是一个TimeSpan保存用户会话超时的值.
最后,响应中的旧cookie应替换为新的cookie:
string encryptedTicket = FormsAuthentication.Encrypt(authTicket);
authCookie =
new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
HttpContext.Current.Response.Cookies.Set(authCookie);
Run Code Online (Sandbox Code Playgroud)
这应该可以解决问题.
| 归档时间: |
|
| 查看次数: |
3319 次 |
| 最近记录: |