请教高手关于缓存用户信息后信息混乱的情况。
请教一个问题。在asp.net中我写了一个基类,在基类里面缓存了登陆人的信息,所有页面继承这个基类。结果当第一个人登陆后,第二个人登陆了就显示了第一个人的信息。请问这个怎么解决。
我基类的方法如下:
C# code
PerModel.usr_userView model = Cache["BasePage_userModel"] as PerModel.usr_userView;//从缓存中读取数据
if (model == null)
{
string[] tableName = new string[] { "Usr_User", "Per_Dictionary", "Architecture" };
AggregateCacheDependency aggregateDependency = new AggregateCacheDependency();//实例化AggregateCacheDependency,用于多个实例SqlCacheDependency的加载
model = userBll.GetUserInfo(Session["UserId"].ToString());
foreach (string table in tableName)
{
aggregateDependency.Add(new SqlCacheDependency("NewOA", table));//把依赖实例加载到数组中
}
if (model != null)
{
Cache.Insert("BasePage_userModel", model, aggregateDependency);//添加到缓存中
}
}
if (model != null)
{
UserID = model.ID;
UserLoginName = model.UserId;
UserRealName = model.UserName;
DepartmentID = model.Org;
DepartmentName = model.OrgName;
}
}
------解决方案--------------------唯一性标识
------解决方案--------------------缓存 你可以当成全局变量看
如果你为每个用户都加个缓存,系统开销上反而得不偿失
------解决方案--------------------实际上catch和Session在使用的时候都是一样的。全部保存在IE浏览器的cockie中。
------解决方案--------------------其实你可以把用户登录信息放在session里
一般都是这么干的
------解决方案--------------------
------解决方案--------------------你把用戶的信息保存在緩存的BasePage_userModel对象中,第二個用戶登录的时候会判断
if (model != null)。。这里肯定不部位NULL的,因为服务端存已经存在BasePage_userModel的缓存对象,所以读取的是第一个缓存的,除非这个时候缓存过期。。
你把BasePage_userModel改成BasePage_userModel+UserID。。加一个表示用户的ID就可以了
------解决方案--------------------
------解决方案--------------------
------解决方案-------------------- 建议不要使用这样。。开销比较大,而且不能同步信息。。将UserID保存在Session中就可以了,基类实例化的时候读下数据还是稍微好点。。
------解决方案--------------------
------解决方案--------------------好多观点真的是错的。
------解决方案--------------------建议把一些稍微重要的数据,加密放入COOKIE,这样会好很多! 重要数据就不要这么做了!