更新: 2012 年 12 月 24 日
以下答案已过时。古老 的FormsAuthentication.Authenticate现在在 ASP.NET 4 MVC 4 中被标记为已过时。
MVC 4 附带了新的品牌Spaking WebSecurity身份验证系统,它解决了旧系统的许多问题。请查看它,除非您的项目仍在使用 MVC 3 或更低版本。
简短的回答是“它工作得非常仔细。”
长答案...
用户帐户详细信息(默认情况下)存储在 SQL CE 数据库中(在 ASPNETDB.MDF 文件中)
ASP.NET 有一个内置的成员资格和角色提供程序系统来帮助进行身份验证。这是 ASP.NET 用于启用对帐户的内置支持的抽象。默认情况下,当您创建应用程序时,您的 web.config 文件已配置,因此您的应用程序使用此成员资格提供程序的内置实现,以允许您的应用程序执行读取和写入数据库、散列或加密密码的魔法,验证用户等。
您获得的代码示例是表单身份验证的一部分
FormsAuthentication.SetAuthCookie(RegisterUser.UserName, false /* createPersistentCookie */);
它是默认管理身份验证的组件。当您执行上述调用时,ASP.NET Forms 身份验证系统会加密用户名和会话数据,并将其存储在用户浏览器上的 cookie 中。(当您调用 FormsAutentication.SignOut() 时,此 cookie 将被删除)
对于每个请求,此 cookie 都会传输到您的服务器。因此,对于每个请求,FormsAuthentication 都会检查并验证它(解密它,检查用户是谁,验证会话没有过期,并在应用程序中设置一些属性,以便您的代码可以知道是哪个用户发出请求)。
如果设置了 /* createPersistentCookie */ 参数,则将 cookie 设置为持久性,这意味着当您在登录时关闭并重新打开浏览器时,cookie 不会被删除。这与您登录时相同,例如 Facebook ,并勾选“记住我”复选框,Visual Studio 创建的项目的默认实现在您的登录页面上正是这样做的。
希望现在您对登录过程中发生的事情有了更好的了解。由于这些在 ASP.NET 中实现的方式,如果您愿意,您可以轻松地配置、扩展或用您自己的实现替换这些功能。
为了更好地理解事情是如何工作的,请按照这篇关于如何实现自定义成员资格提供程序的文章http://msdn.microsoft.com/en-us/library/f1kyba5e.aspx
我应该告诉您,如果您是 ASP.NET 的新手,阅读有关成员资格和身份验证如何工作的内容可能会让人不知所措。(我个人在过去的几天里试图理解并编写一个自定义的会员提供程序来满足我的要求。这有点令人沮丧,所以我休息一下来回答你并用基础知识刷新我的想法。)
如果您对现有系统的工作方式感到满意,请使用它。实现自定义提供程序以了解其工作原理并没有什么坏处。但是内置系统在过去十年中经过了大量测试,并被证明是有效的。那么为什么不使用它呢?我在不同的站点上看到了多个自定义实现,它们试图替换现有的会员系统,只是因为他们不完全理解它。这些实现中的大多数最终都会重写已经可用的内容,并且在可扩展性和安全性方面存在不足。就像一个智者曾经说过的“不要修理它,如果它没有坏”。