日期:2014-05-17  浏览次数:20473 次

请教高手关于缓存用户信息后信息混乱的情况。
请教一个问题。在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里
一般都是这么干的
------解决方案--------------------
探讨

实际上catch和Session在使用的时候都是一样的。全部保存在IE浏览器的cockie中。

------解决方案--------------------
你把用戶的信息保存在緩存的BasePage_userModel对象中,第二個用戶登录的时候会判断
if (model != null)。。这里肯定不部位NULL的,因为服务端存已经存在BasePage_userModel的缓存对象,所以读取的是第一个缓存的,除非这个时候缓存过期。。

你把BasePage_userModel改成BasePage_userModel+UserID。。加一个表示用户的ID就可以了
------解决方案--------------------
探讨

实际上catch和Session在使用的时候都是一样的。全部保存在IE浏览器的cockie中。

------解决方案--------------------
探讨

引用:

实际上catch和Session在使用的时候都是一样的。全部保存在IE浏览器的cockie中。


胡说八道

------解决方案--------------------
建议不要使用这样。。开销比较大,而且不能同步信息。。将UserID保存在Session中就可以了,基类实例化的时候读下数据还是稍微好点。。
------解决方案--------------------
探讨

引用:
建议不要使用这样。。开销比较大,而且不能同步信息。。将UserID保存在Session中就可以了,基类实例化的时候读下数据还是稍微好点。。

谢谢,还是不用缓存了。但是我不太清楚,缓存在什么情况下使用才不会出现我这种情况。

------解决方案--------------------
好多观点真的是错的。
------解决方案--------------------
建议把一些稍微重要的数据,加密放入COOKIE,这样会好很多! 重要数据就不要这么做了!