表单验证浅谈
在每一本ASP.NET的技术书籍中,都会谈到身份验证。但是所提到的东西都感觉比较复杂,需要掌握比较多的东西才能够运用。就算想简单的用用登录控件,也需要几个控件配合使用,并且还要合理配置web.config,还有数据库表。这往往另人一头雾水,并且感觉不太使用,因为控件的外观往往很难满足我们对于界面的要求。
我们往往只需要这样的需求。对于网站目录,只有一部分限制匿名用户访问,需要通过了用户验证才可以;并且用户验证信息存储在用户自定义的数据库中;登录成功后跳转自定义页面;匿名用户访问受限文件,会自动跳转到登录界面;退出后需要重新登录。
这样的需求有一个很简单也很清晰地实现方式,这种方式适合大部分的项目。
首先在web.config中限制匿名用户的访问目录,在根节点<configuration>下,放入下面的代码:
<location path="">
<system.web>
<authorization>
<deny users="?"/>
</authorization>
</system.web></location>
<location path="">
填入你想限制匿名用户访问目录的路径,<deny users="?"/>表示拒绝所有匿名用户访问此目录。
然后更改身份验证提供程序,和配置验证页面和验证通过后的跳转页面:
<authentication mode="Forms">
<forms name="" loginUrl="" defaultUrl=""/>
</authentication>
身份验证提供程序必须为"Forms";name是网站标识,如果在一个服务器下有多个网站,比如网站是处于虚拟主机上的话,那么这个name需要自定义一个名称;loginUrl是登录验证页面的路径,这个页面可以处于受限目录下,也可以处于其他目录中,在受限目录下匿名用户也可以访问这个页面;defaultUrl是登录成功后的自动跳转页面路径,这个不需要在程序中作任何设置,这个页面的跳转是自动的,只要登录成功。
web.config中的配置就这样就结束了,下面我们需要在登录验证页面中做一点小小的工作,告诉程序是否验证成功。
当用户输入用户名和密码之后,我们需要把用户的输入提交到我们自定义储存用户验证信息的地方,比如SQL Server中进行核对,如果验证成功,那么在验证成功的这个判断中加入下面的代码:
FormsAuthentication.RedirectFromLoginPage( , false);
注意,需要引用System.Web.Security命名空间。这个方法是把用户信息储存到Cookie中,这样在验证的有效期内访问受限页面就不用再次验证。这个方法有两个参数第一个是经过身份验证的用户名,第二个参数是个布尔值,false表示创建非持久化会话的Cookie。然后系统会自动跳转到我们在web.config中设置的defaultUrl页面。
最后我们需要添加退出功能。这个功能需要在需要退出的事件中加入下面的代码:
FormsAuthentication.SignOut();
Response.BufferOutput = true;
Response.Redirect("", false);
第一句代码同样需要引入System.Web.Security命名空间。第一句代码的意思就是退出登录;第二句表示缓冲输出,也就是在整个网页处理完毕后再输出;第三句就是重定向登出后页面。
Redirect方法有两个参数,第一个就是重定向页面路径,第二个是个布尔值,随便哪个值都可以,设置为true是立即终止当前页面进程,这样系统会抛出一个异常来终止进程,设置为false就是不终止当前页面。效果上都一样,这个异常是不能避免的,如果不想有异常抛出,设置为false就可以了。
就这样,一个基本的登录验证系统已经实现了。