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

posted on 2011-08-02 00:18  山上明月  阅读(1363)  评论(0编辑  收藏  举报