Web应用中的session

调研了一下,IE8居然是session共享的。(其实是共享cookies中的sessionId),也就是说,你在本机用IE8登录上淘宝之后,你无论打开多少个IE(用Ctrl+n也好,用IE process也好),你都能自动登录哦。

新窗口打开方式

       IE6                   

IE8

CTRL+  N 

 

 共享 session 

共享 session

winodw.open            

共享 session  

共享 session

链接

共享 session  

共享 session

打开 IE                        

新建 session  

共享 session

创建标签页

共享 session

 换句话就是说,如果我打开了A画面,往session里面存了key为a,value为XXX的参数

     接着我打开另一个IE8,再打开A画面,往session里面存了key为a,value为FFFFF的参数

      那这样的话,XXX就被覆盖掉了哦

 

怎么办,最直接的方法让客户换用IE7,然后禁止掉CTRL+N。

    或者还有个解决方法,让客户在IE8上选择文件,打开新会话。。。。。。。。。。。。。。。。。。。。

想来想去,比较靠谱的还是以下的方法:

尝试把session内存储的内容结构化.比如原来是
   session = {a:1,b:2}
   现在存为
   session = {userid1:{a:1,b:2,time:n},userid2:{a:1,b:2,time:n}}
   每次登陆不再是完全更新session而是更新session内的userid节点(session过期的部分功能给自己处理了)
  然后每次生成页面的时候,需要在页面上带上userid信息,所有的页面都import一个common页面即可.现在每次获得请求,都要从页面先获取userid,然后根据userid从session取   出对于的信息,然后根据这些信息进行后续操作。

后来听人介绍,貌似有个系统实现了对session的区分。在IE8下能保证同时只有一个人登录:

http://web230531.host89.chinajsp.net/login.ered?reqCode=init

啊哈哈,我分析了他的http请求,发现原来秘密在内存cookie中有如下的玩意:

Cookie:
JSESSIONID=28D5A358290151D4CCFF847D9EA28DC7; eredg4.login.account=super; eredg4.login.userid=10000000; g4.lockflag=0

我推测他的做法肯定是保存上一个帐户和密码,然后强比

 

posted on 2012-08-28 10:34  熊猫平子  阅读(262)  评论(0)    收藏  举报