Forms身份验证自已总结的解决方案

一:web.config配制文件

None.gif < authentication  mode ="Forms" >
None.gif        
< forms  name ="HuiBao"  loginUrl ="logon.aspx"  protection ="All"  timeout ="60"  path ="/" >
None.gif        
</ forms >
None.gif 
</ authentication >  
None.gif
< authorization >
None.gif        
< deny  users ="?"   />
None.gif        
< allow  users ="*"   />  
None.gif
</ authorization >  
None.gif
None.gif     
< location  path ="EditAccount.aspx" >
None.gif          
< system .web >
None.gif               
< authorization >
None.gif                    
< allow  roles ="Mean" />
None.gif                    
< deny  users ="*"   />
None.gif               
</ authorization >
None.gif       
</ system.web >
None.gif  
</ location > //这里用限制某一目录下的页面或某一页中可以访问的角色,如果角色不对,自动导向到Logon.aspx页面,很方便,但缺点是人性化不高,不能弹出提示,所以下面用在每个页面的pageLoad事件里判断角色再转向。
None.gif
None.gif

二:Logon.aspx页面
//在用户登录验证完毕后调用此方法写cookie,用户名作cookie名,用户角色 作为cookie的内容

None.gif private   void  setCook( string  userName, string  userRole)
ExpandedBlockStart.gifContractedBlock.gif  
dot.gif {
InBlock.gif         HttpCookie hk;
InBlock.gif         FormsAuthenticationTicket Fat ;
InBlock.gif         Fat 
= new FormsAuthenticationTicket(1,userName,DateTime.Now,DateTime.Now.AddMinutes(30),false,userRole);
InBlock.gif         
string hashTicket = FormsAuthentication.Encrypt(Fat);
InBlock.gif         hk 
= new HttpCookie(FormsAuthentication.FormsCookieName,hashTicket);
InBlock.gif         hk.Expires
=Fat.Expiration;
InBlock.gif         HttpContext.Current.Response.Cookies.Add(hk);     
ExpandedBlockEnd.gif  }

None.gif

此方法底下还有两句,导到原请求页面去的,但在第一次登录的时候会自动导到default.aspx页面,所以取消了。

1 None.gif string  requestUrl  =  FormsAuthentication.GetRedirectUrl(FormsAuthentication.FormsCookieName, false );
2 None.gifHttpContext.Current.Response.Redirect(requestUrl);

三:Global.asax页面

None.gif
None.gif
protected   void  Application_AuthenticateRequest(Object sender, EventArgs e)
ExpandedBlockStart.gifContractedBlock.gif  
dot.gif {
InBlock.gif      
if(HttpContext.Current.User!=null)       //验证用户不为空
ExpandedSubBlockStart.gifContractedSubBlock.gif
      dot.gif{
InBlock.gif          
if(HttpContext.Current.User.Identity.IsAuthenticated)//是通过验证了的
ExpandedSubBlockStart.gifContractedSubBlock.gif
          dot.gif{
InBlock.gif                 FormsIdentity fi 
= (FormsIdentity)HttpContext.Current.User.Identity;  //Forms身份验证
InBlock.gif
                 FormsAuthenticationTicket ticket = fi.Ticket;    //取得票据
InBlock.gif
                 string userData = ticket.UserData;                      //取得信息         
InBlock.gif
                 string[] roles = userData.Split(',');
InBlock.gif                 HttpContext.Current.User 
= new GenericPrincipal(fi,roles);    //把角色信息写入当前用户
ExpandedSubBlockEnd.gif
          }

ExpandedSubBlockEnd.gif      }

ExpandedBlockEnd.gif  }

None.gif

四:在任意页面中

None.gif private   void  Page_Load( object  sender, System.EventArgs e)
ExpandedBlockStart.gifContractedBlock.gif  
dot.gif {
InBlock.gif         
// 在此处放置用户代码以初始化页面
InBlock.gif
         if(HttpContext.Current.User.IsInRole("Adminisrator"))
ExpandedSubBlockStart.gifContractedSubBlock.gif         
dot.gif{
InBlock.gif                         Response.Write(
"是这个角色");//做你想要的操作
ExpandedSubBlockEnd.gif
         }

InBlock.gif         
else
ExpandedSubBlockStart.gifContractedSubBlock.gif         
dot.gif{
                             //先弹出提示然后再导向到登录页面。  如果不用提示,则前的的配制节就可以了0
InBlock.gif                
         Response.Write("<script language='javascript'>if(window.opener == null){alert('对不起,您无权访问这个页面,请登录')};location.href('Logon.aspx')</script>");   
                     }

ExpandedBlockEnd.gif  }

//注销

None.gif FormsAuthentication.SignOut(); // 注销 
None.gif
Response.Redirect( " logon.aspx " , true );

转载于:https://www.cnblogs.com/sunsjorlin/archive/2005/11/18/279543.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值