日期:2014-05-18 浏览次数:20888 次
public class SessionListener implements HttpSessionListener{ private static java.util.Hashtable hUserName = new Hashtable(); public void sessionCreated(HttpSessionEvent se){ System.out.println( "Session Created. "); } public void sessionDestroyed(HttpSessionEvent se){ hUserName.remove(se.getSession()); System.out.println( "Session Destroyed. "); }
------解决方案--------------------
在IE7情况下
如果用户此时在桌面上再次双击浏览器图标,输入地址然后连接呢?服务器是否开了一个新的Session? 是
如果用户右键点了一个超连接,选择在新的选项卡中打开连接呢?服务器是否开了一个新的Session? 否
如果用户右键点了一个超连接,选择在新的页面中打开连接呢?服务器是否开了一个新的Session? 没测过,不敢乱讲
在ie7下面,同一个窗口中的多个标签页访问同一个应用时,是共享一个session的,就是说session是根据浏览器窗口的,傲游也是这样,其他浏览器的情况不清楚。
具体实例可以看开心网或校内,在ie7下面,开一个标签页登录A用户,再在同一浏览器窗口下开第二个标签页登录B用户,这是你会发现第一个标签页中的用户再点击链接时,都是B用户的信息了
------解决方案--------------------
如果新窗口是在原来窗口基础上打开的那就是原来的Session
如果是用户直接点击IE图标打开的,就是新Session
------解决方案--------------------
如果用户此时在桌面上再次双击浏览器图标,输入地址然后连接呢?服务器是否开了一个新的Session?
是
如果用户右键点了一个超连接,选择在新的选项卡中打开连接呢?服务器是否开了一个新的Session?
否
如果用户右键点了一个超连接,选择在新的页面中打开连接呢?服务器是否开了一个新的Session?
否
------解决方案--------------------
用户打开浏览器是在服务器上开了一个Session
如果用户此时在桌面上再次双击浏览器图标,输入地址然后连接呢?服务器是否开了一个新的Session? --yes
如果用户右键点了一个超连接,选择在新的选项卡中打开连接呢?服务器是否开了一个新的Session? ---no
如果用户右键点了一个超连接,选择在新的页面中打开连接呢?服务器是否开了一个新的Session? ---no
如果不是IE7而是IE8呢?IE6(当然,IE6没有选项卡)呢? --- 和上述一样
如果浏览器是 FF或者TT或者Opera或者safari呢? --- 和上述一样
后台开的Session个数都是一样的吗? --- 如果是第一种问题类型,后台就有两个相同的session存在。
------解决方案--------------------
用户打开浏览器是在服务器上开了一个Session
如果用户此时在桌面上再次双击浏览器图标,输入地址然后连接呢?服务器是否开了一个新的Session? --如果可用内存不小于32M就是
如果用户右键点了一个超连接,选择在新的选项卡中打开连接呢?服务器是否开了一个新的Session? ---no
如果用户右键点了一个超连接,选择在新的页面中打开连接呢?服务器是否开了一个新的Session? ---no
如果不是IE7而是IE8呢?IE6(当然,IE6没有选项卡)呢? --- 和上述一样
如果浏览器是 FF或者TT或者Opera或者safari呢? --- 和上述一样
后台开的Session个数都是一样的吗? --- 如果是第一种问题类型,后台就有两个相同的session存在。
------解决方案--------------------
引起这个问题的原因应该是用户信息在session中保存时的key是相同的,我以前的项目中也碰到过
只要在session中保存用户信息时,key值唯一就行了,譬如说用userid做key,然后每个请求中带一个userid过来就能解决
------解决方案--------------------
这个问题我分析过,最后我得出的结论是。这个问题的关键是,cookie在不同的IE进程间是否共享,有些COOKIE是完全共享的,有的作用域只能局限于单个进程。因为cookie中保存着你的sessionid 它被服务器用来决定是否应该生成的新的session