Form验证登陆
ASP.NET的安全认证有四种,none,windows,form,passport。下面学习一下form安全认证。
大多参考文章:http://www.cnblogs.com/luomingchao/articles/474674.html
整理如下:
1、配置web.config文件,说明:在网站的各层文件夹下都可以存放web.config。但一些配置节是不允许放在非应用程序根目录下的,所以往往导致出错,而有的时候不会报错,但是配置项不会生效。并且最近一级的web.config会覆盖上层web.config配置项。故可以根据这个思路在项目中建立不同的文件夹然后设置不同的authorization让不同的用户访问指定页面。
<system.web>
<compilation debug="false" targetFramework="4.0" />
<authentication mode="Forms">
<forms loginUrl="Login.aspx" name=".ASPXAUTH"></forms>
</authentication>
<authorization>
<deny users="?"/>
</authorization>
</system.web>
其中:
name: 决定验证用户时所使用的Cookie名称
loginurl: 在用户没有登录是,被重定向的页面
timeout:超时时间,单位为分钟,(类似session级别的状态控制)
<authorization>
<!-- 允许所有用户 –>
<deny users="?" />
<!-- <allow users="[逗号分隔的用户列表]"
roles="[逗号分隔的角色列表]"/>
<deny users="[逗号分隔的用户列表]"
roles="[逗号分隔的角色列表]"/>
-->
</authorization>
其中:
users:表示禁止访问资源的用户列表,使用通配符“?“拒绝匿名用户访问,使用"*",则表示拒绝所有的用户访问.
2、在用户正确登陆的时候:
//1.通过验证后就直接发放 Cookie ,跳转页面将由程序员自行指定,即不会自动跳转
if (this.TextBox1.Text.Trim() == "admin" && this.TextBox2.Text.Trim() == "admin")
{
System.Web.Security.FormsAuthentication.SetAuthCookie(this.TextBox1.Text.Trim(), false);
//Response.Redirect("LoginSuccess.aspx");
}
//2.比如:用户没登录前直接在 IE 地址栏输入 http://localhost/FormTest/UserInfo.aspx ,那么该用户将看到的是 Login.aspx?ReturnUrl=UserInfo.aspx ,输入用户名与密码登录成功后,系统将根据“ReturnUrl”的值,返回相应的页面
if ((this.TextBox1.Text.Trim() == "admin" && this.TextBox2.Text.Trim() == "admin") || this.TextBox1.Text.Trim() == "other")
{
System.Web.Security.FormsAuthentication.RedirectFromLoginPage(this.TextBox1.Text.Trim(), false);
}
3、退出
protected void Button2_Click(object sender, EventArgs e)
{
FormsAuthentication.SignOut();
}
4、其他
- User.Identity.IsAuthenticated为已通过验证,User.Identity.Name为通过验证的用户名。
- 使用Forms验证存储用户自定义信息:即使用基于cookie的票据FormsAuthenticationTicket,安全易用。
FormsAuthenticationTicket fat = new FormsAuthenticationTicket(1, this.TextBox1.Text.Trim(), DateTime.Now, DateTime.Now.AddMinutes(20), false, "该登陆用户的IP为:" + Request.UserHostAddress);string cookieContext = FormsAuthentication.Encrypt(fat);//加密HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, cookieContext);Response.Cookies.Add(cookie);//得到userdata((System.Web.Security.FormsIdentity)this.Context.User.Identity).Ticket.UserData