首页 新闻 会员 周边

ASP.NET 网站,用Session保存用户信息,在一台电脑上登录一个用户后,打开另一个窗口登录别的用户出问题了

1
悬赏园豆:50 [已解决问题] 解决于 2012-04-22 21:35

如题,假设第一个登录的为A第二个为B 登录后的用户信息B就覆盖了前一个用户A的session信息,导致在第一个用户A打开的窗口中,保存信息的时候获取用户信息是第二个用户A的信息,造成 本来是A用户要保存A的信息,却保存成B用户的了,造成很多麻烦,我都称之为串账号/用户了;大家有没有解决方案,比如 登录的信息不冲突;或者A页面保存的时候发现不是A的用户信息了转到重新登录页面等这样的解决方法。

问题补充:

Session[KEY_CACHEUSER] = value;

对于 同个key 的session 又是同个电脑同个浏览器的会话,session的性质就是可以跨网页访问吧?覆盖应该是必然的,只是这种必然对于保存用户信息来说会出现麻烦。

yj4018no1的主页 yj4018no1 | 初学一级 | 园豆:181
提问于:2012-04-19 22:07
< >
分享
最佳答案
0

session里是按散列对象存储在服务端的,无论你用那台机器登陆只要你的Session[“key”]一样,都会出现你所说的情况。解决办法不是很明显吗,就是保证 不同用户或者你想要存储不同Session的key不一样,问题不就解决了。还有,不适用于分布式。

收获园豆:50
lonely_rain | 小虾三级 |园豆:752 | 2012-04-20 17:49

思路很好,那样就需要知道页面是哪个用户请求的便于获取用户信息,假设请求页面都带有用户信息的唯一标识,那么怎么样简单的实现每个页面都带有对应的唯一标识呢,因为是已经完成的项目,不想一个一个页面改,工作量太大了。在此谢谢了。

yj4018no1 | 园豆:181 (初学一级) | 2012-04-21 12:43

@yj4018no1: 这不是思路好不好的问题,我不了解你的问题实际情况,也只能给你解决问题一般思路。具体实现,你最好去看源代码,了解实现逻辑,再去修改。不过最好要遵守“开放封闭原则”!

lonely_rain | 园豆:752 (小虾三级) | 2012-04-23 09:05
其他回答(4)
0

可能要设置web.config吧。

<configuration>
  <system.web>
    <sessionState cookieless="true"
      regenerateExpiredSessionId="true" />
  </system.web>
</configuration>
悟行 | 园豆:12559 (专家六级) | 2012-04-19 22:35

这不能解决这个问题吧!

支持(0) 反对(0) yj4018no1 | 园豆:181 (初学一级) | 2012-04-20 12:30
0

寫cookie 是不是寫的一樣哦。

無限遐想 | 园豆:3740 (老鸟四级) | 2012-04-20 08:53
0

关注...

轻狂の书生 | 园豆:1042 (小虾三级) | 2012-04-20 09:04
0

Session 里面保存一个 字典<User, ShoppingInfo>之类的,不就解决问题了? 要什么解决方案! 

ChatinCode | 园豆:2272 (老鸟四级) | 2012-04-20 10:38

不错的方法...

支持(0) 反对(0) 轻狂の书生 | 园豆:1042 (小虾三级) | 2012-04-20 11:27

你没有明白我的问题吧?

支持(0) 反对(0) yj4018no1 | 园豆:181 (初学一级) | 2012-04-20 12:30

@yj4018no1: 我觉得正常应该不会有这种情况,您能将关键代码贴出来吗?

支持(0) 反对(0) ChatinCode | 园豆:2272 (老鸟四级) | 2012-04-23 08:24
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册