ASP.NET 用户注册与登录流程控制

在深入本文之前,您需要熟悉ASP.NET中的Forms Authentication。Forms Authentication的配置位于web.config文件中,具有以下配置文件片段和分配的值。

默认值如下:

  • loginUrl:指向应用程序的自定义登录页面。您应该将登录页面放置在需要安全套接字层(SSL)的文件夹中。这有助于确保凭据在从浏览器传输到Web服务器时的完整性。
  • protection:设置为All,以指定表单身份验证票证的隐私和完整性。这会导致使用machineKey元素上指定的算法对身份验证票证进行加密,并使用machineKey元素上指定的哈希算法进行签名。
  • timeout:用于指定表单身份验证会话的有限生命周期。默认值为30分钟。如果发出了持久的表单身份验证Cookie,则timeout属性也用于设置持久Cookie的生命周期。
  • name和path:设置为应用程序配置文件中定义的值。
  • requireSSL:设置为false。此配置意味着身份验证Cookie可以通过非SSL加密的通道传输。如果您担心会话劫持,应考虑将requireSSL设置为true。
  • slidingExpiration:设置为true,以强制执行滑动会话生命周期。这意味着只要用户保持在网站上的活动,会话超时就会定期重置。
  • defaultUrl:设置为应用程序的Default.aspx页面。
  • cookieless:设置为UseDeviceProfile,以指定应用程序对所有支持Cookie的浏览器使用Cookie。如果不支持Cookie的浏览器访问站点,则表单身份验证将身份验证票证打包在URL上。
  • enableCrossAppRedirects:设置为false,以指示表单身份验证不支持在查询字符串中或作为表单POST的一部分自动处理传递在应用程序之间的票证。

FormsAuthentication.SetAuthCookie方法用于为提供的用户名创建一个身份验证票证,并将其添加到响应的Cookie集合中,或者如果您使用无Cookie身份验证,则添加到URL中。此函数的第一个重载有两个参数:

  • userName:经过身份验证的用户的名称。
  • createPersistentCookie:设置为True以创建持久Cookie(跨浏览器会话保存的Cookie);否则为false。

此方法向浏览器添加一个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; } }
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485