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

时间:2011-03-11 19:40:32

标签: asp.net forms-authentication login-control

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

谢谢, 科里

2 个答案:

答案 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)

登录控件包含LoggingInLoggedIn个事件,您可以使用这些事件自行处理身份验证。

您可以通过设置LoggingIn取消e.Cancel = True事件中的登录过程,然后使用新的new FormsAuthenticationTicket(...)

手动创建故障单