日期:2014-05-18  浏览次数:20829 次

急求教session问题(在同一机器上用两个帐户登陆,第二个用户登陆后的页面是第一个用户的,也就是不能重新打开新的登陆后页面,而是覆盖了第一个,在线等啊???

网站是jsp的。
当用户输入用户名密码登陆后,生成一个session值  
  以后就通过判断这个session是否为空来检测用户是否登陆  
   
  现在问题是,如果在同一台电脑上同时登陆两个用户,在第一个用户登陆后打开一个窗口,不关闭窗口,再打开一个新窗口,用第二个用户登陆,这时第一个用户的 登陆后窗口变成第二个用户的信息。 第二个用户没有自己打开登陆后的窗口,而是覆盖了第一个用户的登陆后打开的窗口。 同一个用户不同机器可以登陆。 
  这是为什么???如何解决啊???  
 我看了可能和session相关,如何在客户端解决这个问题?我想不同用户登陆后都打开自己的窗口。而不是去覆盖之前的。
不能改变服务端程序啊。


------解决方案--------------------

 我想你一定是用的遨游浏览器吧,我看 qq 在使用遨游浏览器的时候它的 session 都是共享的。也就是说打开第一个页面的时候没有关闭,再打开第二个页面时出现的如:用户名等 session 是第一个页面的用户名,我想是这个意思吧。 大家可以使用遨游浏览器打开 qq 空间,打开两个就知道楼主说的那个问题。 这样吧,你每次创建 session 的时候指定为 false 即: Session session = request.getSession(false); 就是说每次创建 session 都不重新 new 出一个新的 sessionId 而是使用旧的 sessionId ,旧的 sessionId 也就是说是最先开始执行 Session session = request.getSession(); // 最先开始获得 sessionId 的地方应该是 true 不是false ,以后的就是 false 。 这样的话,在下面 new 出 session 的时候都不创建新的,而是使用旧的。你看看这个办法行不行。
------解决方案--------------------
其实我觉得就是开两个浏览器就好了,貌似浏览一关,就一个session对象就给注销,那反过来想应该是一样的吧,就是一个session对象的引用应该就是对应一个浏览器的吧,不知道我这样的理解对吗?两个的话,应该不会出现覆盖的问题了吧
------解决方案--------------------
关键是问题是不是同一个浏览器进程,在同一个浏览器进程中session是会被覆盖的,不同浏览器进程的session是不会覆盖的。
简单说,一个session只能对应一个浏览器进程
你可以查看任务管理器,看看有几个浏览器进程