首页 新闻 会员 周边 捐助

关于.net 2.0网站中的用户登陆及验证方式。

0
[已解决问题] 解决于 2009-02-19 13:38

在用MemberShip和FormsAuthentication进行登陆后为什么这个信息会进入System.Security。就是可以通过HttpContext.Current.Identity.Name得到登陆后的账户名?

刚开始研究这个还是不清楚,希望得到指教。

杨佳霖的主页 杨佳霖 | 初学一级 | 园豆:0
提问于:2009-02-18 19:24
< >
分享
最佳答案
0

1、单使用form验证的时候,用户在登录的过程中系统会利用用户名称生成一个FormsAuthenticationTicket   cookie保存到客户端。

2、用户访问网页的时候,系统有一些默认的HTTPMODULE.具体有那些可以查看类似下面:

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG\web.config

文件中的httpmodules 配置节,在这我们要关注的时候处理forms验证的配置节点:

FormsAuthentication

<add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule"/>

3、我们找到他的实现类,在OnAuthenticate方法中可以找到如下的代码段:

e.Context.SetPrincipalNoDemand(new GenericPrincipal(new FormsIdentity(ticket), new string[0]));

可见framework通过存储在cookie中的ticket信息,构造出了HttpContext.Current.User对象。

所以默认情况下,你就可以通过HttpContext.Current.User.Identity.Name来获取用户ID。

 

大致上就这样了。

5yplan | 小虾三级 |园豆:1330 | 2009-02-18 23:42
其他回答(1)
0

登录时用FormsAuthentication认证票据,应该就可以在HttpContext.Current.Identity.Name中得到的。

例如:

        //建立认证票据
                    FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(
                        1, // version
                        strLoginName, // user name
                        DateTime.Now, // creation
                        DateTime.Now.AddMinutes(40),// Expiration
                        false, // Persistent
                        aRole); // User data
                    //加密 存入Cookie
                    string encryptedTicket = FormsAuthentication.Encrypt(authTicket);
                    HttpCookie authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
                    Response.Cookies.Add(authCookie);

canbeing | 园豆:1287 (小虾三级) | 2009-02-18 20:47
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册