在编写动态页面的时候要注意,如果使用了FrameSet框架,就可能在子页中丢失session对象。
我做了一个试验,写了三个jsp页面A、B、C,A是FrameSet框架页,B、C是两个子页,分别在A、B、C中打印session对象,在IE上访问A。结果发现在三个页面打印的session是不同的。准确的讲,是有的时候相同,有的时候不同,不稳定。
IE6/IE7支持的P3P(Platform for Privacy Preferences Project (P3P) specification)协议默认阻止第三方无隐私安全声明的cookie,Firefox目前还不支持P3P安全特性,firefox中自然也不存在此问题了。Mircosoft对此的具体描述可以参见 Privacy in Internet Explorer 6。
通过在A中加入以下java代码得到解决:
response.setHeader("P3P","CP=\"NON DSP COR CURa ADMa DEVa TAIa PSAa PSDa IVAa IVDa CONa HISa TELa OTPa OUR UNRa IND UNI COM NAV INT DEM CNT PRE LOC\"");
参考文章:
《iframe跨域session丢失问题》
http://wenku.baidu.com/view/ea504514866fb84ae45c8d2c.html
《P3P解决cookie存取的跨域问题》
http://www.cnblogs.com/love2wllw/archive/2010/04/09/1708585.html
《P3P script src 解决cookie存取的跨域问题 java 终极解决办法》
http://blog.youkuaiyun.com/leidengyan/article/details/4217281
《使用frame注意session陷阱》
http://blog.youkuaiyun.com/sunyujia/article/details/2574006
《IFrame中Session丢失的解决办法……》
http://www.cnblogs.com/imghu/archive/2011/08/11/2134628.html