使用Forms进行身份验证(Asp.net)



1、背景
     以往项目登陆后的用户信息都是存放在session中,但session有一个问题就是读取的时候需要先实例化所在类,在调用对象()如果用static修饰,则可能到时多次登陆sessionid都一样,存在安全问题。目前的项目使用FormsAuthentication方式存储登陆用户信息,使用的是Cookie存储方式。

2、代码介绍
      2. 1  public class UserInfo定义当前登陆用户需要存储的基本信息
   2.2 登陆成功后将用户信息对象UserInfo序列化为json字符串存储
        (系统会自动关联当前用户到HttpContext.Current.User.Identity.Name)
           var curUser = new UserInfo();
          string name = JsonConvert.SerializeObject(curUser);
            FormsAuthentication.SetAuthCookie(name, false);
   2.3 登陆用户信息的实体对象(读取HttpContext.Current.User.Identity.Name  Json字符串并反序列化为UserInfo对象
  public class Runtime      
  {
        /// <summary>
    /// 当前登录用户相关信息
    /// </summary>
    public static UserInfo CurrentUser
    {
        get
        {
            if (HttpContext.Current.Request.IsAuthenticated)
            {
                SysUser longinUser = JsonConvert.DeserializeObject<UserInfo>(HttpContext.Current.User.Identity.Name);
                if (string.IsNullOrEmpty(longinUser.LoginName))
                {
                    return null;
                }
                else
                {
                    return longinUser;
                }
            }
        }
    }
}
        2.4 退出登陆
            FormsAuthentication.SignOut();

3、优点和缺点
       优点:使用static方法,读取方便;使用Forms验证,安全性有一定保障

        缺点:
        1、保存的基本信息不可过多,否则调用
FormsAuthentication.SetAuthCookie方法时会抛异常(“无法加密身份验证票”)
        2、Forms使用Cookie存放数据,存在一定的安全隐患





















郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。