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

ie8 火狐 session 问题
问题描述:
   
  ie8和火狐都可以选项卡的形式打开网页,以前ie6开多个窗口,在任务管理器中会出现多个explore.exe的进程,但是火狐不会。以前还认为这样很还,因为它可以减少我们电脑的压力,达到一定的选项卡数量后才又开启一个进程,就是说当我打开多个网页的时候它的会话也是共用的。

  比如我现在在ie6上,打开一个登录页面,登录A人员信息。此时我再打开一个ie6的浏览器打开同样的登录页面,登录B人员信息,ie6能达到预期效果,让A,B同时在线。

  现在我用ie8按照上面的步骤操作,当我打开B页面时,我再刷新A页面,A页面的信息变成了B页面人员的信息。因为ie8和火狐一样它会session共享,会认为是在同一个session,第二次提交修改了session的值。

  那么现在要怎样解决ie8这个session失效的问题呢?如何在ie8上也有ie6,ie7的效果呢?

找了些解决方法:
1:用户通过菜单 File > New session 打开新窗口,或者使用命令行参数 iexplore.exe -nomerge 来打开IE。
这样是基于浏览器解决,客户肯定是不懂的了,也不可能每个客户都去教。这很不现实。

2:SESSION key 不使用COOKIE传递 使用URL传递就可以做到
可以借鉴网易邮箱地址栏参数  

url传递sessionid这个倒是可以一试,不过不知道具体应该如何做?
而且我发现,其实我们跳转的时候好像地址栏后面是会自动跟着sid=XXXXXXXXXXXXXXXXX的。
http://localhost:9091/hotel_manage/loginUser.htm;jsessionid=D9273B75DB10E9BA5D88B87A7ED04F29

请教各位,这第二种方案适用url传递如何做?


参考资料:

我们可以使用url转发的方式,在客户端cookie被禁用的时候,把服务器端发送过来的JSESSIONID用下面的方式保存在url里

http://localhost:8989/session1/session/testsession123.jsp;jsessionid=F1543A66EB5C7930D2CED3EFE3958BA1

注意这里的格式,中间有一个分号

有两种获得url转发的方法

方法1:

这个标签的作用是:把对应helloEncodeRul.jsp的页面,进行URL重写以后,把重写后的url放置到page中,这个时候,用"${pageScope.myurl }"就可以取到这个url重写后的url

<c:url var="urltest" scope="page" value="helloEncodeRul.jsp"></c:url>

 

<a href="${pageScope.myurl }">TestSession</a>

使用了整个标签以后,当前页面就会在第一次访问服务器的时候把服务器发送过来的JSESSIONID保存在url后面,用“;”分开,大概就是这个样子

;jsessionid=F1543A66EB5C7930D2CED3EFE3958BA1

 

方法2.

<a href="<%= response.encodeURL("testsession123.jsp") %>">TestSession</a><br>

 

一般情况下,推荐使用前一种方法。

 

当cookie被禁用以后,可以使用url重写的方式来获得客户端发送过来的JSESSIONID,整个时候整个JSESSIONID就会被保存在显示的拼接在url后面。





------解决方案--------------------
ie8是有这样的问题哟,学习一下!
------解决方案--------------------
jf..................
------解决方案--------------------
应该不能。
------解决方案--------------------
反正你通过网页、服务器代码是不行的。

如果只是为了测试两个IE session可以,
文件>新建会话,或者运行命令行
iexplore.exe -nomerge

参考
------解决方案--------------------
不用session 用cookie
------解决方案--------------------
探讨

不用session 用cookie

------解决方案--------------------
围观。。。 学习。。。
------解决方案--------------------
探讨

引用:

不用session 用cookie


此Session非request.getSession(),cookie也分会话的,比如JSESSIONID

------解决方案--------------------
学习。。。。。
------解决方案--------------------
不是和你说了,
探讨

反正你通过网页、服务器代码是不行的。

如果只是为了测试两个IE session可以,
文件>新建会话,或者运行命令行
iexplore.exe -nomerge

参考

------解决方案--------------------
你那个需求,AFAIK,对于普通用户无解,包括IE6用户(普通人分不清进程的区别),而且也是senseless的
------解决方案--------------------
ding ........
------解决方案--------------------