1、背景
以往项目登陆后的用户信息都是存放在session中,但session有一个问题就是读取的时候需要先实例化所在类,在调用对象()如果用static修饰,则可能到时多次登陆sessionid都一样,存在安全问题。目前的项目使用了FormsAuthentication方式存储登陆用户信息,使用的是Cookie存储方式。
2、代码介绍
2. 1 public class UserInfo:定义当前登陆用户需要存储的基本信息
2.2 登陆成功后将用户信息对象UserInfo序列化为json字符串存储
(系统会自动关联当前用户到HttpContext.Current.User.Identity.Name)
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方法时会抛异常(“无法加密身份验证票”)
1、保存的基本信息不可过多,否则调用FormsAuthentication.SetAuthCookie方法时会抛异常(“无法加密身份验证票”)
2、Forms使用Cookie存放数据,存在一定的安全隐患