使用 Forms Authentication 实现用户注册、登录
摘要
这是一个系列文章,主要介绍 ASP.NET Forms Authentication(窗体身份验证)的使用
方法,如何使用 Forms Authentication 实现用户注册、登录;并能够在用户登录后随时从
HttpContext 中读取用户实体。
这是这一系列的第一部分,主要介绍与 Forms Authentication 相关的系统配置和可以使
用的类型等。
第一部分 基础知识
前言
本来使用 Forms Authentication 进行用户验证的方式是最常见的,但系统地阐明其方法
的文章并不多见,网上更多的文章都是介绍其中某一部分的使用方法或实现原理,而更多
的朋友则发文询问如何从头到尾完整第实现用户的注册、登录。因此, Anders Liu 在这一
系列文章中计划通过一个实际的例子,介绍如何基于 Forms Authentication 实现:
用户注册(包括密码的加密存储)
用户登录(包括密码的验证、设置安全 Cookie)
用户实体替换(使用自己的类型作为 HttpContext.User 的类型)
有关 Forms Authentication 的原理等内容不属于本文的讨论范畴,大家可以通过在
Google 等搜索引擎中输入“Forms Authentication”、“Forms 身份验证”、“窗体身份验证”等关
键词来查看更多资源。本文仅从实用的角度介绍如何使用这一技术。
不使用 Membership
本文介绍的实现方式不依赖 ASP.NET 2.0 提供的 Membership 功能。这主要是因为,如
果使用 Membership,就必须用 aspnet_regsql.exe 实用工具配置数据库,否则就得自己写自
定义的 MembershipProvider。
如果用 aspnet_regsql.exe 配置数据库,就会导致数据库中出现很多我们实际并不需要的
表 或 字 段 。 此 外 更 重 要 的 是 , 默 认 的 SqlMembershipProvider 给 很 多 数 据 表 添 加 了
ApplicationID 列,其初衷可能是希望可以将多个应用程序的用户全部放在一个库里,但又
能彼此隔离。但实际情况是,每个应用程序都在其自身的数据库中保存用户数据。因此,
引入这个 ApplicationID 无端地在每次查找用户时增加了额外的条件。
另一方面,如果考虑自己实现一个 MembershipProvider,因为工作量巨大,有点得不
偿失。
但是,如果不使用 Membership,也就无法享受 ASP.NET 2.0 中新增的 Login 等控件的
便利了。
与 Forms Authentication 相关的配置
在 web.config 文件中,<system.web>/<authentication>配置节用于对验证进行配置。为
<authentication>节点提供 mode="Forms"属性可以启用 Forms Authentication。一个典型的
<authentication>配置节如下所示:
<authentication mode="Forms">
<forms
评论0