使用ASP.NET登录控件时是否可以手动设置身份验证票证?

Cor*_*ett 7 asp.net forms-authentication login-control

我正在使用ASP.NET登录控件.我希望能够为每个用户单独设置表单身份验证的超时(而不是在web.config中全局设置).根据我的理解,唯一的方法是手动设置AuthenticationTicket的超时.使用登录控件时有没有办法做到这一点?在我看来,登录控件抽象了所有这一切.我希望有一些方法可以继续使用Login Control,但也可以为每个用户单独设置FormsAuthentication超时.

谢谢,科里

Ale*_*lex 7

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)

这应该可以解决问题.