网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 大学论文导航 设计下载 最新论文 下载排行 原创论文 论文源代码
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > ASP.net > 正文

ASP.NET Forms身份认证

来源:http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 13/01/05
示用户信息的页面代码:

  1. <fieldset><legend>用户状态</legend><form action="<%= Request.RawUrl %>" method="post"> 
  2.     <% if( Request.IsAuthenticated ) { %> 
  3.         当前用户已登录,登录名:<%= Context.User.Identity.Name.HtmlEncode() %> <br /> 
  4.           
  5.         <% var user = Context.User as MyFormsPrincipal<UserInfo>;  %> 
  6.         <% if( user != null ) { %> 
  7.             <%= user.UserData.ToString().HtmlEncode() %> 
  8.         <% } %> 
  9.           
  10.         <input type="submit" name="Logon" value="退出" /> 
  11.     <% } else { %> 
  12.         <b>当前用户还未登录。</b> 
  13.     <% } %>              
  14. </form></fieldset> 

为了能让上面的页面代码发挥工作,必须在页面显示前重新设置HttpContext.User对象。
为此,我在Global.asax中添加了一个事件处理器:

  1. protected void Application_AuthenticateRequest(object sender, EventArgs e)  
  2. {  
  3.     HttpApplication app = (HttpApplication)sender;  
  4.     MyFormsPrincipal<UserInfo>.TrySetUserInfo(app.Context);  

TrySetUserInfo的实现代码:

  1. /// <summary>  
  2. /// 根据HttpContext对象设置用户标识对象  
  3. /// </summary>  
  4. /// <param name="context"></param>  
  5. public static void TrySetUserInfo(HttpContext context)  
  6. {  
  7.     if( context == null )  
  8.         throw new ArgumentNullException("context");  
  9.  
  10.     // 1. 读登录Cookie  
  11.     HttpCookie cookie = context.Request.Cookies[FormsAuthentication.FormsCookieName];  
  12.     if( cookie == null || string.IsNullOrEmpty(cookie.Value) )  
  13.         return;  
  14.       
  15.     try {  
  16.         TUserData userData = null;  
  17.         // 2. 解密Cookie值,获取FormsAuthenticationTicket对象  
  18.         FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(cookie.Value);  
  19.  
  20.         if( ticket != null && string.IsNullOrEmpty(ticket.UserData) == false )  
  21.             // 3. 还原用户数据  
  22.             userData = (new JavaScriptSerializer()).Deserialize<TUserData>(ticket.UserData);  
  23.  
  24.         if( ticket != null && userData != null )  
  25.             // 4. 构造我们的MyFormsPrincipal实例,重新给context.User赋值。  
  26.             context.User = new MyFormsPrincipal<TUserData>(ticket, userData);  
  27.     }  
  28.     catch { /* 有异常也不要抛出,防止攻击者试探。 */ }  

在多台服务器之间使用Forms身份认证

网学推荐

免费论文

原创论文

设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号