您的位置:首页 > 其它

问题:IE7.0 或 IE 8.0发生串用户事件

2010-12-23 10:41 337 查看
问题:IE7.0 或 IE 8.0发生串用户事件(IE7.0的情况下同时在2个Tab中分别登录系统,IE8.0的情况下同时打开2个窗口登录)

问题产生的原因:

出现这个问题的原因是因为我们系统目前采用的是session cookie来标识用户。但是现在的浏览器都开始趋向于多进程的session共享,即通过多个标签或页面打开多个进程访问同一环境时会共享一个session cookie,只有当浏览器被关闭时才会被清除,也就是你有可能在标签中关闭了该环境的连接,但只要浏览器未被关闭并且在服务器端的session未失效前重新进入该环境,那么就还是使用原session进行访问;而某些浏览器在打开多页面时也可能建立独立的session,IE8、Chrome默认都是共享session的。这就是我们出现串用户问题的原因。

浏览器如何处理Session:

浏览器产生一个新的实例(new instance)有很多方式。 1) 点击桌面上的蓝色小图标 2) 从start 菜单中选取IE 3) 直接用命令行启动 4) Click a Quick Launch shortcut 5) 在已有的IE窗口里,control + N (新窗口) 6) 在已有的IE窗口里,control + T (新Tab) 7) Call window. open() from JavaScript 8) Click on a link in current IE window and redirect to a new URL 9) …. 慢, 有点穷举的意思了,作为测试人员,还是要等价区间来看问题J 所以上述动作, 在不同浏览器里, 在同一浏览器(如IE)的不同版本里,所产生的行为(和session相关)是不一样的。 IE6 and 7里,1) 到 4) 新IE instance都运行在独立进程中,session 不共享。 5)到 8) 则共享 session. 多年来这都给web 开发人员和使用者带来些疑惑。所以IE8 里作修改(其实是和Firefox一致起来了),就是不管怎么样,各窗口共享Session and Cookie.

See the last two comments in this thread http://www.vistaheads.com/forums/microsoft-public-internetexplorer-general/346079-ie-8-release-version-sharing-session-cookies-across-browsers.html

This behavior is by-design for IE8. We elected to make session handling more consistent. Previously, some entry points would create a new session (e.g. clicking a desktop icon) while others did not. (e.g. File > New Window). Now in IE8, (除非显示申明,否则共享session), 如果要显示申明的话(explicitly), clicking File >New Session, or by starting iexplore.exe with the no merge command line parameter. 注:如果是IE6, 还要看用户是否升级过IE8,(如果安装过IE8,卸载在安装IE6 ,其内核依旧是IE8) 所以会串用户是因为IE涉及上的问题,如果需要修改,那要确认用户的期望行为到底是什么样的, 然后再看如何解决。

Login的时候我们系统做了什么?

术语解释:

• session,中文经常翻译为会话,其本来的含义是指有始有终的一系列动作/消息,比如打电话时从拿起电话拨号到挂断电话这中间的一系列过程可以称之为一个 session。 session在web开发语境下的语义又有了新的扩展,它的含义是指一类用来在客户端与服务器之间保持状态的解决方案。由于各种用于web开发的语言在一定程度上都提供了对这种解决方案的支持,所以在某种特定语言的语境下,session也被用来指代该语言的解决方案,比如经常把Java里提供的javax.servlet.http.HttpSession简称为session。

• cookie, 保存在客户端的文本小文件,其的作用就是为了解决HTTP协议无状态的缺陷所作出的努力。 正统的cookie分发是通过扩展HTTP协议来实现的,服务器通过在HTTP的响应头中加上一行特殊的指示以提示浏览器按照指示生成相应的cookie。然而纯粹的客户端脚本如JavaScript或者VBScript也可以生成cookie。 而cookie 的使用是由浏览器按照一定的原则在后台自动发送给服务器的。浏览器检查所有存储的cookie,如果某个cookie所声明的作用范围大于等于将要请求的资源所在的位置,则把该cookie附在请求资源的HTTP请求头上发送给服务器。 cookie的内容主要包括:名字,值,过期时间,路径和域。

举个例子来描述一下cookie和session机制之间的区别与联系。

Leo经常去的一家S打头的咖啡店喝咖啡,那家店也针对Leo 这样的老顾客推出”喝5杯咖啡免费赠一杯咖啡”的优惠,然而一次性消费5杯咖啡的机会微乎其微,这时就需要某种方式来纪录某位顾客的消费数量。想象一下其实也无外乎下面的几种方案: 1、该店的店员很厉害,能记住每位顾客的消费数量,只要顾客一走进咖啡店,店员就知道该怎么对待了。这种做法就是协议本身支持状态。 2、发给顾客一张卡片,上面记录着消费的数量,一般还有个有效期限。每次消费时,如果顾客出示这张卡片,则此次消费就会与以前或以后的消费相联系起来。这种做法就是在客户端保持状态。 3、发给顾客一张会员卡,除了卡号之外什么信息也不纪录,每次消费时,如果顾客出示该卡片,则店员在店里的纪录本上找到这个卡号对应的纪录添加一些消费信息。这种做法就是在服务器端保持状态。 由于HTTP协议是无状态的,而出于种种考虑也不希望使之成为有状态的,因此,后面两种方案就成为现实的选择。具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。同时我们也看到,由于采用服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能需要借助于cookie机制来达到保存标识的目的,但实际上它还有其他选择。

If you want to know more about Session lifetime, please read the following article: http://blogs.msdn.com/b/ieinternals/archive/2010/04/05/understanding-browser-session-lifetime.aspx

如何测试Window share session:

以下网站可以帮你测试你的浏览器(是否跨Window share session) http://www.enhanceie.com/test/sessions/

你可以这样测试

方案一:

• 新开一个浏览器窗口A

• 再开一个浏览器窗口B

• 修改颜色选项 绿 in A window

• 查看B (IE 6/7 里, B不便; IE 8里B窗也变绿了)

方案二:

• 新开一个浏览器窗口A

• 在A窗口里, new 一个 window or tab

• 修改颜色选项 绿 in A window

• 查看B (不管是new tab or new window, B窗也变绿了)

Note: 联动代表share same session/cookie

相关测试问题:

另外,以上的 session机制会在安全性测试方面引入新问题。服务器方面从技术上并不能即时了解用户关闭了浏览器(只有在session超时的时候取消),所以除非用户显示log out, 否则,只要有一个窗口忘记关了,就等于用户就没有log out, 别人可以从任何新的IE 进程内,获得合法用户的身份(通过share session) 因此,Load Runner脚本中的Session Id需要做关联: IE进程关掉,本地记录session id的cookie可能被清除,但是服务器端的session并不会因此而结束,即会继续监听这个Session Id。当我们通过IE连接系统时会产生一个新的Session Id,所以在我们看来,好象是老的Session Id已经不可用。但是如果通过Load Runner或其他安全性工具向服务器发送老的Session Id的信息,一样是可以被接受的。这是一个潜在的安全性问题。 ——这也就是为什么很多网站提醒用户不要直接关掉IE,而是先Logout再关掉IE的原因。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐