单点登录遇到报超过60分钟的问题

来源:互联网 发布:腾讯云数据库英文缩写 编辑:程序博客网 时间:2024/05/02 01:09

最近在协助生产推广项目组做一个单点登录(SSO),从一个系统请求宁外一个系统的某个JSP页面,然后把这个页面的内容放在某个iframe里面,发现IE在对iframe里面的页面写Cookie的时候有一些安全限制,导致读取Cookie不成功,页面就一直抱session60分钟超时错误,找了好长时间的解决办法,终于找到如下的办法:

1.页面里的COOKIE不能是浏览器进程的COOKIE(包括验证票和不设置超时时间的COOKIE),否则跨域会取不到.这点做跨域COOKIE的人比较少提到.不过实际上留意下几家大学做的方案,有细微的提到他们的验证模块里的COOKIE是有设置超时时间的.

2.当利用IFRAME,记得要在相应的动态页的页头添加一下P3P的信息,否则IE会自觉的把IFRAME框里的COOKIE给阻止掉,产生问题.本身不保存自然就取不到了.这个其实是FRAMESETCOOKIE的问题,FRAME或者IFRAME都会遇到.

只需要设置 P3P HTTP Header,在隐含 iframe 里面跨域设置 cookie 就可以成功。他们所用的内容是:

P3P: CP='CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR'

ASP直接在头部加了头部申明,测试有效。
<%Response.AddHeader "P3P", "CP=CAO PSA OUR"%>

php
的话,应该是如下写法:
header('P3P: CP=CAO PSA OUR');

ASP.NET
的话
通过在代码上加Response.AddHeader("P3P", "CP=CAO PSA OUR")或者在Window服务中将ASP.NET State Service启动。

JSP:
response.setHeader("P3P","CP=CAO PSA OUR")

 

二、P3P

什么是P3P
P3P
是万维网联盟(W3C)公布的一项隐私保护推荐标准,旨在为网上冲浪的Internet用户提供隐私保护。现在有越来越多的网站在消费者访问时,都 会收集一些用户信息。制定P3P标准的出发点就是为了减轻消费者因网站收集个人信息所引发的对于隐私权可能受到侵犯的忧虑。P3P标准的构想是:Web站点的隐私策略应该告之访问者该站点所收集的信息类型、信息将提供给哪些人、信息将被保留多少时间及其使用信息的方式,如站点应做诸如本网站将监测您所访问的页面以提高站点的使用率本网站将尽可能为您提供更合适的广告等申明。访问支持P3P网站的用户有权查看站点隐私报告,然 后决定是否接受cookie或是否使用该网站。



 防止Webloigic下的iframe的Session失效 
请在Weblogic.xml添加如下代码 

Java代码  收藏代码
  1. <session-descriptor>      
  2.         <cookie-name>JSESSIONID1</cookie-name>  
  3. </session-descriptor>  


原来session在服务器端生成后分配的sessionID在客户端的保存方式是个cookie,它的生命周期在浏览器关闭后就会结束,而这个cookie的名字如果不特别设置,weblogic会以默认的名称“JSESSIONID”来设置这个cookie的名称,我两个应用的的session cookie名字都没有设置,客户端在第一次通过应用A请求代理转发到应用B时,应用B返回的同名session cookie覆盖了客户端原本的应用A的session cookie,所以导致了应用A session的丢失。 
解决方法是,在应用B的weblogic.xml中的session descriptor标记中添加session cookie的名称设置,使其区别于A应用的session cookie名称.其中的cookie-name可以重命名!解决在iframe中进行跨域访问时session丢失的问题 


原创粉丝点击