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

博客介绍了Web项目中与登录相关的内容,包括web.config配制文件、Logon.aspx页面(登录验证后写cookie及跳转处理)、Global.asax页面,还提及在任意页面的注销操作,最后给出了转载来源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一: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.gifprivate 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页面,所以取消了。

1None.gifstring requestUrl = FormsAuthentication.GetRedirectUrl(FormsAuthentication.FormsCookieName,false);
2None.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.gifprivate 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.gifFormsAuthentication.SignOut();//注销 
None.gif
Response.Redirect("logon.aspx",true);

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值