在深入本文之前,您需要熟悉ASP.NET中的Forms Authentication。Forms Authentication的配置位于web.config文件中,具有以下配置文件片段和分配的值。
默认值如下:
FormsAuthentication.SetAuthCookie方法用于为提供的用户名创建一个身份验证票证,并将其添加到响应的Cookie集合中,或者如果您使用无Cookie身份验证,则添加到URL中。此函数的第一个重载有两个参数:
此方法向浏览器添加一个Cookie或持久Cookie,并设置了在timeOut参数中设置的过期时间,名称和路径分别在name和path参数中设置。一旦Cookie过期,用户将自动注销。因此,用户登录会话依赖于在浏览器Cookie中保存的表单身份验证票证的过期。在这里,将使用此技术创建一个永久的用户登录会话。
Cookie Helper类的功能是将表单身份验证票证添加到浏览器Cookie集合中,并设置生命周期过期。
public sealed class CookieHelper
{
private HttpRequestBase _request;
private HttpResponseBase _response;
public CookieHelper(HttpRequestBase request, HttpResponseBase response)
{
_request = request;
_response = response;
}
[DebuggerStepThrough()]
public void SetLoginCookie(string userName, string password, bool isPermanentCookie)
{
if (_response != null)
{
if (isPermanentCookie)
{
FormsAuthenticationTicket userAuthTicket = new FormsAuthenticationTicket(1, userName, DateTime.Now, DateTime.MaxValue, true, password, FormsAuthentication.FormsCookiePath);
string encUserAuthTicket = FormsAuthentication.Encrypt(userAuthTicket);
HttpCookie userAuthCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encUserAuthTicket);
if (userAuthTicket.IsPersistent) userAuthCookie.Expires = userAuthTicket.Expiration;
userAuthCookie.Path = FormsAuthentication.FormsCookiePath;
_response.Cookies.Add(userAuthCookie);
}
else
{
FormsAuthentication.SetAuthCookie(userName, isPermanentCookie);
}
}
}
}
此功能在登录页面或控件上点击登录按钮时使用。在附带的示例项目中,以下函数写在AccountController类中。此函数验证用户的登录,然后向浏览器添加一个永久的表单身份验证票证。
private bool Login(string userName, string password, bool rememberMe)
{
if (Membership.ValidateUser(userName, password))
{
CookieHelper newCookieHelper = new CookieHelper(HttpContext.Request, HttpContext.Response);
newCookieHelper.SetLoginCookie(userName, password, rememberMe);
return true;
}
else
{
return false;
}
}