论坛首页 Java企业应用论坛

如何在一台电脑上对多个浏览器的session进行区分应用

浏览 10451 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2006-11-22  
有个B/S/S结构的系统,jsp页面中多次用到了登录用户的session信息(包括id,权限等),但在测试中发现,同一台微机,打开多个浏览器窗口,分别登录不同用户,会出现session共用的哄乱。
如:登录管理员界面,进行一些操作,当前session应为管理员信息,切换到一个普通用户登录的页面,读取到的session信息却发生了混乱,读出了管理员的相关信息,导致一般用户的界面下,却按管理员的权限进行数据提取。
当然,每台机子只登录一个用户不会暴露这个问题。
请问:如何有甄别的读取系统生成的session信息,避免交叉混用的情况出现。
   发表时间:2006-11-22  
用的浏览器是什么
0 请登录后投票
   发表时间:2006-11-23  
写程序时没有对session进行初期化处理....
0 请登录后投票
   发表时间:2006-11-23  
抛出异常的爱 写道
写程序时没有对session进行初期化处理....

是的,登陆成功时保存用户信息到session之前先把session中原来用和的信息清空。
0 请登录后投票
   发表时间:2006-11-23  
是你自己想让它混乱,能怪得了系统么?
如果是IE,在原窗口基础上使用ctrl+N生成的新窗口和其它弹出窗口,都相当于是同一个application的,会共用一个session。
在IE里想使用多个session的话,每个IE窗口,都必须是点击ie图标来生成的新窗口。这样互相之间才不冲突。

保险一点的方法,是在本机安装多个浏览器,IE、mozilla、firefox、opera。这样绝对的互不冲突,就看你的应用能不能跨浏览器来跑了。
0 请登录后投票
   发表时间:2006-11-23  
干脆一点,就只能让用户只允许开一个IE,就决不会出现这个问题了,
0 请登录后投票
   发表时间:2006-11-23  
这个实质上是cookie的问题,因为ctrl+N新建的窗口是共用cookie的,理所当然地,session也是共用的。
0 请登录后投票
   发表时间:2006-11-27  
guoshiguan 写道
干脆一点,就只能让用户只允许开一个IE,就决不会出现这个问题了,

应该是一台机子只让一个帐户登陆吧?这个程序是可以相对控制的
0 请登录后投票
   发表时间:2007-01-10  
together说的很对。
我在补充一下,严格的说session是线程不安全的,因为你开多了窗口,它们自然不是属于一个线程之内,session自然就会乱掉。
解决的方式有两种:
   1、在客户端设置令牌来解决,也就是每次请求都给客户端返回服务器短的session id,并且保存该session id到session中,然后根据客户端返回的session id与服务器短session中保存的session id比较做决定。这种方式比较麻烦
   2、还有就是使用ThreadLocal来保存用户信息。
个人觉得第二中方式简单一些
  
0 请登录后投票
   发表时间:2007-01-10  
不是线程,是浏览器进程。
Ctrl+n出来的是同一进程中的新窗口。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics