我在登录页面输入用户名:admin 和密码:1
我跟踪了下代码,发现Context.User.Identity.Name 的值是 admin
我想知道:
1、Context.User.Identity.Name到底是数据库中UserName字段的记录?还是在登录页面txtUserName中输入的用户名?2、Context.User.Identity.Name是如何得到用户名的?谢谢!

解决方案 »

  1.   

    Context.User.Identity.Name//根据命名这个应该是一个实体类
      

  2.   

     FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
     1,   //版本
     Context.User.Identity.Name,     //登陆时候存入的标识用户的用户名
     DateTime.Now,                   // 发布时间
     DateTime.Now.AddHours(1),       // 过期时间
     false,                          // 是否持久
     roleStr                         // 角色字符串
     );
      

  3.   

    HttpContext.Current.User用户对象表示用户的安全上下文,代码当前即以该用户的名义运行,包括用户的标识(IIdentity)和它们所属的任何角色。所有用户对象都需要实现 IPrincipal 接口
    参考
      

  4.   

    1.
    准确地说,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则是直接读取这个变量的值
      

  5.   

    authentication ticket是在通过登陆验证的时候写到cookie中的。
    如过你用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中保存了你的登录名信息,以后访问就可以读出来了。
      

  6.   

    asp.net的form验证通过login登录控件已经将中间读写验证票存取cookie的过程全部封装起来了。
      

  7.   

    经过验证后记录的一个全局变量,觉得是用户输入的,
    如果用户与密码不正确,则进不了系统;在验证通过后,把登录页面txtUserName的用户名赋给Context.User.Identity.Name