我在登录页面输入用户名:admin 和密码:1
我跟踪了下代码,发现Context.User.Identity.Name 的值是 admin
我想知道:
1、Context.User.Identity.Name到底是数据库中UserName字段的记录?还是在登录页面txtUserName中输入的用户名?2、Context.User.Identity.Name是如何得到用户名的?谢谢!
我跟踪了下代码,发现Context.User.Identity.Name 的值是 admin
我想知道:
1、Context.User.Identity.Name到底是数据库中UserName字段的记录?还是在登录页面txtUserName中输入的用户名?2、Context.User.Identity.Name是如何得到用户名的?谢谢!
1, //版本
Context.User.Identity.Name, //登陆时候存入的标识用户的用户名
DateTime.Now, // 发布时间
DateTime.Now.AddHours(1), // 过期时间
false, // 是否持久
roleStr // 角色字符串
);
参考
准确地说,Context.User.Identity.Name既不是数据库中的UserName字段,也不是登录页面txtUserName中输入的用户名,而是从cookie中取到的值,当然它的值和数据库UserName字段和txtUserName的输入都是必然一样的。2.
过程很复杂,主要的几步:
1) 当访问一个页面时,执行 FormsAuthenticationModule.OnAuthentication方法进行身份验证
2) 该方法调用 ExtractTicketFromCookie, 从cookie中解密出一个FormsAuthenticationTicket(ticket是通过登录验证的时候被加密写到cookie中的)
3) ticket中即包含登录用户名称,赋值给Context.User属性
4) 以后读取Context.User则是直接读取这个变量的值
如过你用Login作为登陆控件、配置成采用SqlMembershipProvider进行身份验证,主要的过程如下:
1. 输入用户名密码后点登陆按钮,会调用到SqlMembershipProvider.ValidateUser方法
2. ValidateUser方法从数据库中读出用户名和密码,跟页面中输入的密码进行比对
3. 如果比对正确,就建立一个FormAuthenticationTicket对象,存入用户名、过期时间等信息
4. 调用FormsAuthentication.Encrypt方法,把ticket对象加密并转换成cookie字符串
5. 在Response中写入cookie,cookie的名字是在web.config文件中<authentication>配置节中<forms>元素的name属性的值
6. 至此验证完成,cookie中保存了你的登录名信息,以后访问就可以读出来了。
如果用户与密码不正确,则进不了系统;在验证通过后,把登录页面txtUserName的用户名赋给Context.User.Identity.Name