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。
大致上就这样了。
登录时用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);