不同版本IE下session管理的区别

. 理解 Session 原理

Session 机制是一种在 web 服务器上用于保存会话信息的机制,一般使用散列表( HashTable HashMap 等)。

会话可以理解为浏览器和服务器的的通信过程,一次会话期间, session 对象应该是不会变化的,除非某些操作使得服务器上改变了 session 对象。

WEB 服务器是如何保证一次会话 session 不变的呢。每次请求都有一个隐藏的参数会传递到服务器,这个参数就是 sessionid ,这个值会保存在 cookie 中,如果禁用了 cookie ,则会同 url 重写的方式,跟在 url 地址后面。

服务器收到这个 sessionid ,每次都会进行比较是不是和现存在的是同一个,作出不同的判断。

.session 使用场景

         针对同一域中的操作比较:         

       

新窗口打开方式        IE6                    IE8

CTRL+N                       共享 session   共享 session

winodw.open             共享 session   共享 session

链接                             共享 session   共享 session

打开 IE                         新建 session   共享 session

创建标签页                                      共享 session

        

1. 打开 IE 时多个浏览器窗口(不是标签页)

         IE6 中,不同方式会有不同的行为,在 IE8 中,不同窗口共享一个会话。如果要使 IE8 IE6 在打开 IE 时,表现一致,在 IE8 启动参数中加入 -nomerge

 

2. 同一用户同时打开多个相同的页面

    此时浏览器会共享 session ,如果这个页面操作,服务器上有更新 session 对象的信息,可能会导致 session 信息会被覆盖。举例:

        

         打开页面 page.jsp 后,输入信息,然后提交,提交时从 session page 的值。

        

         假设某页面 page.jsp 每次打开之后,都会根据数据设置 session

         第一次的数据值为 value1

         session.setAttribute("page","value1");

         第二次的数据值为 value2

         session.setAttribute("page","value2");

        

         同时打开两个 page.jsp ,第一次打开之后未提交,第二次打开之后也未提交。

         此时,如果回到第一个页面,并提交,取到的 page 值是 value2 ,数据有异常。

         回到第二个页面,并提交,取到的 page 值是 value2 ,数据正常。

        

. 规避措施

         1. 禁止同一页面同时打开多次

         2.1 条件不满足的情况下,不使用 session 保存数据,考虑使用页面表单的 hidden 域传值

         3. 对于 GET 请求,可以使用 URL 重写,加入参数,敏感信息需要加密不能使用


 

本文同步发表于www.devtutor.com(西蜀博客-关注互联网、移动互联网的技术博客)

本文作者:coolfiry

本文出处:www.devtutor.com

声明: 本文可以不经作者同意, 任意复制, 转载, 但请保留文章最后3行的作者, 出处,以及声明信息. 谢谢.

猜你喜欢

转载自coolfiry.iteye.com/blog/1235046
今日推荐