ASP.NET 完成基于表单的身份验证
实现:验证用户身份成功,并登陆后台Admin文件夹里的index.aspx后台管理首页面,否则禁止匿名用户访问项目中的Admin文件夹里的任何一个文件。
步骤一:
在根目录下的web.config中加入:
<system.web>
<authentication mode="Forms">
<forms loginUrl="Login.aspx" defaultUrl="Admin/Index.aspx" name=".ASPXFORMSAUTH" timeout="30">
</forms>
</authentication>
</system.web>
loginUrl:用户没有登录,跳转到的登录页面 默认值为 login.aspx。
defaultUrl:正确登录之后,在后台代码没有指向指定页的时候,系统将自动跳转的页面
name:指定要用于身份验证的 HTTP Cookie。如果正在一台服务器上运行多个应用程序并且每个应用程序都需要唯一的 Cookie,则必须在每个应用程序的 Web.config 文件中配置 Cookie 名称。 默认值为".ASPXAUTH"。
timeout:指定 Cookie 过期前逝去的时间(以整数分钟为单位), 默认值为 "30"
步骤二:
步骤二可以由俩种方法:
1)、在Admin文件夹下新建一个web.config文件,并加入以下代码
<system.web>
<!--拒绝匿名用户访问此目录下的任何文件-->
<authorization>
<deny users="?"/>
</authorization>
</system.web>
deny users="?":表示禁止匿名用户访问Admin目录下的任何文件
到目前为止,只要你访问Admin下的任何文件,都会自动跳转到Login.aspx登陆页面了,要求你先登录,否则别想看到页面。
2)、在根目录下的web.config文件中的<system.web> 的结束标记</system.web> 后加入一下代码:
<location path="Admin">
<system.web>
<authorization>
<deny users="?"/>
</authorization>
</system.web>
</location>
path:表示设置所要针对的路径/目录
deny users="?":表示禁止匿名用户访问Admin目录下的任何文件
步骤三:
在根目录下,创建Login.aspx登陆页面(可不是在Admin目录下),加两个textbox控件和一个botton控件,分别是用户名,密码,和登陆按钮
双击登陆按钮,在其登陆方法里写上:
protected void btn_Login_Click(object sender, EventArgs e)
{
if (TextBox1.Text == "admin" && TextBox2.Text == "fenghua17173")
{
//“通知”表单验证,该用户名已经通过身份验证
FormsAuthentication.RedirectFromLoginPage(TextBox1.Text, true);
}
else
{
Response.Write("<script>alert('账号或密码有误,登录失败!');</script>");
}
}
这时你在login.aspx页面里填上账号密码,系统就会根据根你在根目录下web.config中配置的 defaultUrl地址路径跳转过去,也就是Admin/Index.aspx页面。
现在Admin目录下的所有页面,均已通过身份验证,得到了可访问的票据。
最后一点:
有了登录,当然别忘了需要注销,这个更简单:
在Admin目录下的任何一个页面中,加一个注销button按钮,并在其方法下写入:
//退出系统,注销用户
protected void btn_Logout_Click(object sender, EventArgs e)
{
//删除用户票据
FormsAuthentication.SignOut();
//重新定向到登陆页面
FormsAuthentication.RedirectToLoginPage();
}
好了,你已经知道如何配置web.Config中的authentication,来完成基于表单的身份验证了。
本文参考:http://www.fengfly.com/plus/view-174785-1.html
思考:
网站结构如下:
/index.aspx
/userLogin.aspx
/adminLogin.aspx
/user/*.aspx
/admin/*.aspx
需求:在未登录的情况下:
访问/user/路径下的页面的请求转向到/userLogin.aspx;
访问/admin/路径下的页面的请求被转向到/adminLogin.aspx;