A服务部署localhost:8080
B服务部署localhost:8081
在A页面中嵌入一个iframe访问B的JSP页面,
导致A服务的session被覆盖
服务部署的IP是不能换的
有没有大神帮忙看下呢~
你这个问题是不存在的,除非你定义的是同一个站点。
Session通常是基于Cookie来保存状态的,当你是同一个站点的时候,会出现这样的问题,但是你即便是同一个站点,却使用了不同的端口,所以这个问题也不存在,因为cookie在客户端的保存是基于host+port的方式唯一识别的。
此外,Session也可以通过数据库的方式保存,在.net里是可以这样的,但在非.net里,这个我不能确认。
浏览器对session的保存应该是不区分端口的~
@narci_dong: 区分端口。因为cookie是区分的,session在浏览器端记录时是基于cookie的。
骑着蜗牛耍流氓 的两个连接并不适合你,那说的一个是在同一个浏览器的不同标签下。
你可以对session的初始化进行跟踪看,(事件session_start)同时结合Fiddler2这个工具一起。
@519740105: 有尝试把B服务换个IP来部署,换了以后就没问题了~
@519740105: 禁用了B服务的cookie就好了~ 在tomcat里设置<Context cookies = "false">
@narci_dong: 跟踪下他们的sessionID,看是否一致的?理论上是不一致的。
事实上,我以前经常在同一台服务器通过不同的端口来配置不同的站点,从没有出现过你这样的问题,当然,那时我的应用场景似乎(忘记了,按照我的开发习惯本身应该是有类似情况的)没有你这样的通过嵌入IFRAME来调用另外一个只是端口不同的应用。
而且,我现在的一个临时项目情况也类似:
1、在旧项目(主站点)基础上开发(webform)
2、新项目作为旧项目的一个子站点(ASP.NET MVC)存在
3、主站点是一个框架结构(frameset)
4、左侧菜单是主站点控制的
5、由主站点控制登录,然后通过共享的COOKIE来达成子站点的登录
6、左侧菜单的命令有连接到主站点的,也有连接到子站点的
7、运行中,主站点与子站点的Session是完全独立的。
其中,无论是在正式发布的站点中还是本地测试站点中都不存在你说的情况
@519740105: 因为我们不适用的一个服务吧~ 你用的IIS,我用tomcat
@narci_dong: 这个倒是,我没有弄过tomcat,也只能乱出招了。
参考
http://www.iteye.com/topic/92409?page=3
seesion覆盖
http://www.cnblogs.com/panjun-Donet/archive/2009/04/16/1436994.html
浏览器按域名区分cookie的。当你正式上线有域名后。这个问题应该就没有了吧
记得cookie是有层级关系的。可以人为设置。你可以让两个cookie存在于不同层级。
自己实现Session.