论坛首页 Java企业应用论坛

IE7下不同用户会共享同一个session会话的问题

浏览 44816 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-06-22  
有没有考虑过那些多标签的浏览器, 比如 IE7, Firefox, 不去这样做(不同Tab属于不同的 session)的原因呢? 我认为, 基本上客户的要求属于外行人的异想天开, 最好直接说服客户放弃这种想法, 而不是醉心于挑战自己的技术能力.
0 请登录后投票
   发表时间:2007-06-25  
ddandyy 写道
janh 写道
如果非要这么做,那就要在每个请求中都加上当前用户是谁,后台还要在相同的session中判断不同的用户,这个改动实在太大了。

一个最简单的方法是在不同页签中使用不同的url,如xxx.iteye.com,只要不同的页签,前面的xxx值不同就行了,可以用用户名代替。这样只要url不同每个页签的sessionid就是不同的,后台也用不着去识别这个xxx到底是什么,实现也很简单,加个泛域名解析就行了。


多数情况下应该可以  不过 如果A用户 把他的一个地址COPY到B用户登陆的机器上运行 打算让B看结果   会怎么样呢


这个也好办啊 先吧范围缩小,再判断条件上加上 机器ip就可以了
这样问题就变成同一个机器上的 多用户 处理了
0 请登录后投票
   发表时间:2007-06-25  
wgfywin 写道
对这个帖子的问题,我认为要分两个层面来解答
1,以最小的开销,解决楼主的实际问题。
2,从纯粹技术问题的角度来考虑如何解决这类问题。

首先从第一种角度来回答:
 
  如果可以通过商务手段让客户放弃这一需求,就应该使用商务手段。如果是一个必须实现的功能,那么下面给出具体的解决办法,思路是前面的回帖中提到过的,我这里是比较具体的做法,可行性如何,请老鸟评论:
帖主具体的系统设计怎么做的,我们不是太清楚,我这里冒昧给出一些具体的实现方式。
    1,每请求都带有userid,如果view使用的是类似struts的formbean的方式实现的话,可以给formbean加一个公共的parent class,里面带有userid这个属性,然后,页面代码上面,直接在 </form> (</html:form>) 前面加上这个隐藏域,  ( 直接查找</form> 然后替换成 <input type="hidden" name="xx" value="<%=xxxx%>"/> </form> 或者  </html:form> 替换成 <html:hidden property="xx"/> </html:form>)
   2,session 里面给session中存放的数据加上userid。我觉得对于一个用户而言,只应该有一个对象被存放在session中,这个对象包含了需要存放的各种信息,包括user id ,privileges, roles, preferences, etc.  也就是用一个class来统一管理对session的访问。 借助于现在很多开发工具的Refactor功能,应该可以方便的改好。

   第二种角度回答这个问题:
     前面已经有多种说法了,我也是学习中:)


你这两种方法其实就是一种,在后台使用单session针对一个机器,然后通过唯一性标识绑定用户 进行区分,
类似在session中放一个Map<userid,Map<sessionKey,sessionValue>>

另外一种思路我觉得更好,就是没试验过,在client的页面上 设置hidden input 讲seesionId携带,或者url携带sessionid,这样的好处是服务器不需要做改变,问题是client只有最后操作的用户的cookie能够在client得到保存,cookie的使用需要更加小心。
0 请登录后投票
   发表时间:2007-06-26  
一个个都把别人当傻子  只想着怎么跳过问题
0 请登录后投票
   发表时间:2007-06-26  
SteveGY 写道
哈哈,看你们说了这么多,这个………………
我们一直在做这样的事情,我们的很多项目都是有前台和后台的,前后台的登录用户是不同的,为了测试前台输入的数据是否在后台显示正常,通常都会在自己的机器上开两个IE的窗口测试两个不同的用户登录。我不知道各位都是如何做这样的测试的?难道是在一个IE上退出前台登录,然后再用后台用户登录,再测试的??

解决这个问题,很简单的,启动两个不同的IE进程,就可以了,不要使用Ctrl-N或者Ctrl-T,这样的新窗口或新选项卡都是同一个IE的进程,所以会使用相同的cookies池,也就在server上有相同的session,这个是一个重要的设计特征,就是这样设计的。新启动一个IE进程,就是在“开始”菜单上再点一下Internet Explorer的图标而已,呵呵,然后看看task manager,是不是有2个iexplorer.exe的进程,呵呵,如果你想要同时测试3个不同的登录用户的话,知道怎么做了吧。


请你认真的看完别人的帖子 再发表言论好不好??
人家都说了 就是在Ctrl n就是 Ctrl t 的时候 怎么解决这个问题

新开ie进程谁不知道啊?? 新的进程有新的session 而 Ctrl n或 Ctrl t出来的 有同一session.
我们讨论的 在这种情况下如何解决问题

而且 尤其是你的第一句话 "哈哈,看你们说了这么多,这个………………"
让人看了不爽, 你是在嘲笑之前所有人的讨论吗? 希望不是 ,但你确确实实给人一种类似的感觉 .

PS:对事不对人 我就是说你这帖子回的没质量,不是针对你的人,希望你不要介意.
0 请登录后投票
   发表时间:2007-06-26  
fins 写道
SteveGY 写道
哈哈,看你们说了这么多,这个………………
我们一直在做这样的事情,我们的很多项目都是有前台和后台的,前后台的登录用户是不同的,为了测试前台输入的数据是否在后台显示正常,通常都会在自己的机器上开两个IE的窗口测试两个不同的用户登录。我不知道各位都是如何做这样的测试的?难道是在一个IE上退出前台登录,然后再用后台用户登录,再测试的??

解决这个问题,很简单的,启动两个不同的IE进程,就可以了,不要使用Ctrl-N或者Ctrl-T,这样的新窗口或新选项卡都是同一个IE的进程,所以会使用相同的cookies池,也就在server上有相同的session,这个是一个重要的设计特征,就是这样设计的。新启动一个IE进程,就是在“开始”菜单上再点一下Internet Explorer的图标而已,呵呵,然后看看task manager,是不是有2个iexplorer.exe的进程,呵呵,如果你想要同时测试3个不同的登录用户的话,知道怎么做了吧。


请你认真的看完别人的帖子 再发表言论好不好??
人家都说了 就是在Ctrl n就是 Ctrl t 的时候 怎么解决这个问题

新开ie进程谁不知道啊?? 新的进程有新的session 而 Ctrl n或 Ctrl t出来的 有同一session.
我们讨论的 在这种情况下如何解决问题

而且 尤其是你的第一句话 "哈哈,看你们说了这么多,这个………………"
让人看了不爽, 你是在嘲笑之前所有人的讨论吗? 希望不是 ,但你确确实实给人一种类似的感觉 .

PS:对事不对人 我就是说你这帖子回的没质量,不是针对你的人,希望你不要介意.

好吧,我承认,确实是我说话口气有问题,呵呵,看来无论如何,还是得注意语气

不过,说真的,从很多回复上基本看不出来,楼主有你说的那种意思,比如: “呵呵,原来早就爆出来了啊,为什么我都搜不到类似的信息呢?我们肯定不能限制用户不使用IE7等支持选项卡的浏览器,这是一个很严重的问题。”,“对于很多企业应用,一个用户可能会身兼不同的角色和职责,所以同时以不同的用户身份登录同一个应用也是很平常的事情,而且目前很多应用都是正式上线的生产系统,都需要打补丁的话可能比较麻烦,这个问题没有别的解决方案了吗?”
我不知道,也许我们的多个客户都比较讲道理,他们一向认为开两个浏览器进程做不同身份登录是合理的。
0 请登录后投票
   发表时间:2007-06-26  
SteveGY 写道

不过,说真的,从很多回复上基本看不出来,楼主有你说的那种意思,比如: “呵呵,原来早就爆出来了啊,为什么我都搜不到类似的信息呢?我们肯定不能限制用户不使用IE7等支持选项卡的浏览器,这是一个很严重的问题。”,“对于很多企业应用,一个用户可能会身兼不同的角色和职责,所以同时以不同的用户身份登录同一个应用也是很平常的事情,而且目前很多应用都是正式上线的生产系统,都需要打补丁的话可能比较麻烦,这个问题没有别的解决方案了吗?”
我不知道,也许我们的多个客户都比较讲道理,他们一向认为开两个浏览器进程做不同身份登录是合理的。


难道你不知道这是什么意思么
0 请登录后投票
   发表时间:2007-06-26  
跳过问题不等于逃避问题, 跳过问题是最小的代价, 我认为这是第一选择.


解决办法似乎很明显:
1. 跳过问题
   一般来说, 这肯定属于很少数的情况, 可以告诉此人用2个浏览器.
   或者采用其他商务手段

2. 改动全部url, 如果你想这么做的话, 代价显然很高.



所有选择应该都在这里了.
0 请登录后投票
   发表时间:2007-06-27  
我也来提供点思路:
1)sessionid 就是一个标志位吗,标志不同的用户,如果能在用户打开新的标签的时候改变sessionid就好了,因为cookie,浏览器进程,域名是相互关联的,估计不好改。
2)自己实现一个类似session的功能,不用sessionid,用用户名绑定后台数据,每次访问时传回用户名,根据用户名做不同的操作。
3)如果说服客户更简单的话就说服客户。
0 请登录后投票
   发表时间:2007-06-27  
centgo 写道
我也来提供点思路:
2)自己实现一个类似session的功能,不用sessionid,用用户名绑定后台数据,每次访问时传回用户名,根据用户名做不同的操作。


这个也不太好做的。难道要求要求每个URL都要跟“?uid=XXXX”吗?
0 请登录后投票
论坛首页 Java企业应用版

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