问题描述:
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和火狐都可以选项卡的形式打开网页,以前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后面。
解决方案 »
- 这条hql语句为什么不能排序?求解
- 关于IE6和IE7的样式问题
- 高分求java写的树型 源码(100分)
- 新手救助关于字符串的问题(急)
- 批量插入20w条数据,长事务问题
- 发布axis2时出现如下错误,实在没读懂
- 100分相送!在JBuilder中如何单步调试JSP+JAVABEAN?
- JavaBean的删除问题为什么不正确.高手请进!!!!急!!急!!急!!急!!急!!急!!急!!急!!
- 新手求教JS给tr行添加字体颜色
- struts真的就适合你吗?
- SunOne8.2下连接Oracle10g数据库,启动出错 Package oracle.sql is sealed
- jsp中的onsubmit事件不执行。。。?
文件>新建会话,或者运行命令行
iexplore.exe -nomerge参考
此Session非request.getSession(),cookie也分会话的,比如JSESSIONID
补充一下,也就是说,属于会话类型的cookie,在同一个客户的浏览器里面(当然属于不同进程/会话),可以同时有2个版本。
session的id实际上也是存在cookie里的啊。
这个问题没办法解决吗?
所谓的:
文件>新建会话,或者运行命令行
iexplore.exe -nomerge
这样的方式决定是不可行的。
一个网站肯定不会教每一个点击网站的人
window.open(someUrl, "某个固定的窗口名字"),
如果那个“固定名字的窗口”已经由两外一个进程打开,会导致sessionA的人看到sessionB的信息。
iexplore.exe -nomerge http://xxxx/?session=2之类,然后强制该企业用户以这个入口进。
而是在session中这样:当一个用户登录,session.setAttribute("192.168.1.1:2010-5-22:21.26.000",user); ,然后在所有的url中加上browserCardId="192.168.1.1:2010-5-22:21.26.000"(类似于jsessionid了)。那这样就可以避免了冲突了~~多个浏览器选项卡是共享了session,但是各自的信息是分开的。没有登录的选项卡,browserCardId就为空嘛~~我还没试,楼主试试吧,继续关注中!!!!!
对于你的这个想法,我想你是把session.setAttribute("name",value);name属性创建于当时的时间了吧?
那么这个属性你怎么确定?这个思路我觉得应该和上面url+sessionid是同一个道理吧?
我一开始是想的后台去判断sessionid,可是后来我发现新打开一个窗口的时候sessionid根本就是相同的。
所以我同意你说的,将sessionid保存在cookie中时的这种情况。应该问题是出在这里了。
新打开一个窗口的时候不能新建一个实例这就没有办法了。
我觉得这个问题还是在于浏览器打开窗口时不会新开一个进程不会新创建对象造成的。