iframe下session cookies失效

 

<%Response.AddHeader("P3P", "CP=CAO DSP COR CUR ADM DEV TAI PSA PSD IVAi IVDi CONi TELo OTPi OUR DELi SAMi OTRi UNRi PUBi IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE GOV"); %>

 

一段解决IFRAME中SESSION无法保留的代码.

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是微软的隐私策略,通常情况下跨域iframe或者frameset默认采用的隐私策略为“中”,该级别的策略拒绝保留session。CAO PSA OUR则意味着你同意跨域保留session,但是也意味着你的网站不再安全。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 如果在使用iframe时出现sessionid丢失的问题,可能是由于浏览器的安全策略导致的。浏览器通常会阻止iframe访问其他域的cookie信息,因此可能会导致sessionid丢失。 为了解决这个问题,您可以尝试使用以下方法之一: 1.在主页面中设置cookie的域名为顶级域名(如example.com),而不是子域名(如www.example.com)。这样,所有子域名都可以访问cookie信息。 2.使用URL参数传递sessionid。在主页面中将sessionid附加到iframe URL中,然后在iframe中解析URL以获取sessionid。 3.使用postMessage API。主页面可以将sessionid发送到iframe中,而不是直接访问cookie信息。 希望这些方法能够解决您的问题。 ### 回答2: 当使用iframe进行页面嵌套时,如果嵌套的页面来自不同的域名,即跨域访问,由于浏览器的同源策略限制,父页面无法直接访问和操作嵌套的子页面,包括对子页面的cookie和session的访问。 同源策略是浏览器为了保护用户信息安全而采取的一种安全策略。简单来说,同源是指两个URL的协议、域名和端口完全相同。当浏览器发现当前访问的页面和子页面不符合同源策略时,就会禁止跨域的访问,也包括对session和cookie的操作。 因此,如果在父页面中设置了session或者在子页面中进行了登录操作,然后在iframe中进行跨域访问,父页面无法获取到子页面的session信息,导致sessionid失效。 要解决这个问题,可以使用一些跨域通信的方法,例如HTML5中的postMessage API,它可以实现父页面和子页面之间的跨域通信。具体来说,子页面可以通过postMessage方法将session信息传递给父页面,然后在父页面中进行处理和保存。 另外,还可以采用代理的方式来解决跨域问题。可以在父页面的服务器上设置一个代理接口,用于接收子页面的请求,并将请求发送到子页面所在的域名上。通过这种方式,可以绕过同源策略限制,实现对session信息的有效传递和处理。 总之,iframe跨域导致sessionid失效是因为浏览器的同源策略限制,通过使用跨域通信方法或者代理的方式,可以解决这个问题,确保session信息能够正确传递和使用。 ### 回答3: iframe跨域导致sessionid失效是由于浏览器的同源策略所造成的。同源策略要求只有在同一域名、端口和协议的情况下,才允许共享Cookie信息。当使用iframe加载其他域名的页面时,浏览器会认为这是跨域操作,因此不会向服务器发送包含sessionid的Cookie。 解决这个问题的方法有以下几种: 1. 使用跨域通信技术:例如,可以使用postMessage方法实现跨域通信,将sessionid通过消息传递给iframe内的页面,然后在该页面内进行处理。这样可以绕过同源策略限制,实现跨域传递和使用sessionid。 2. 设置Access-Control-Allow-Credentials头信息:如果你有控制iframe所在的域名的权限,可以在服务器端设置Response头信息中的Access-Control-Allow-Credentials为true。这样可以告诉浏览器允许跨域请求包含Cookie信息,从而解决sessionid失效的问题。 3. 使用代理页面:可以在同一域名下创建一个代理页面,通过该页面来加载不同域名的内容。在代理页面中,可以将sessionid从服务器端获取后传递给iframe内的页面,从而保证sessionid的有效性。 需要注意的是,跨域操作可能存在安全风险,因此在实施跨域解决方案时应谨慎,并确保只在必要的情况下进行跨域操作。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值