最近在做项目是遇到一个比较恶心的问题: 项目A要iframe嵌套项目B的页面, 使用了单点登录的方式 嵌套项目B页面后, 再访问A项目菜单 居然session失效了, 这个问题苦恼了好久,最终在网上找到了解决方法,如下:(注:我这边项目A和项目B是同ip 不同端口)
首先要搞懂出现这种情况的原因:
首先要明白 客户端用cookie保存了sessionID,当我们请求服务器的时候,会把这个sessionID一起发给服务器,服务器会到内存中搜索对应的sessionID,如果找到了对应的 sessionID,说明我们处于登录状态,有相应的权限;如果没有找到对应的sessionID,这说明:要么是我们把浏览器关掉了(后面会说明为什 么),要么session超时了(没有请求服务器超过20分钟),session被服务器清除了,则服务器会给你分配一个新的sessionID。你得重 新登录并把这个新的sessionID保存在cookie中。
其次IP相同的两个session对应的cookie是一样的,IP相同认为是同一个域,接收了B的set-cookie指令,把对应的cookie内容覆盖了,其中包括jsessionid,造成A的session丢失。 如果IP不同,则不会发生这个问题。。
解决方案如下: