internet-explorer - 在Internet Explorer IFRAME中禁用/不保存cookie

  显示原文与译文双语对照的内容

我有两个网站,假设它们是 example.comanotherexample.net 。 在 anotherexample.net/page.html 上,我有一个 IFRAME SRC="http://example.com/someform.asp" 该IFRAME显示用户填写并提交到 http://example.com/process.asp的表单。 当我在自己的浏览器窗口中打开表单(" someform.asp") 时,所有工作都很好。 但是,当我将 someform.asp 加载为 IE 6或者 IE 7中的IFRAME时,example.com的Cookies 不会保存。 出现 Firefox 这个问题不 appear,.

出于测试目的,我在 http://newmoon.wz.cz/test/page.php 上创建了类似的设置。

example.com 使用cookie-based会话( 而且我也无能为力),因此没有 Cookies,process.asp 将不会执行。 。如何强制 IE 保存那些 Cookies

嗅探HTTP流量的结果: 在获取/someform.asp 响应时,有一个有效的per-session Set-Cookie标头( 例如。 Set-Cookie: ASPKSJIUIUGF=JKHJUHVGFYTTYFY ),但在 POST/process.asp 请求时,根本没有Cookie头。

Edit3: 一些AJAX+serverside脚本显然能够回避这个问题,但是看起来很像一个 Bug,而且它打开了一个全新的安全漏洞集合 。 我不想让我的应用程序使用bug+security漏洞的组合,因为它很容易。

编辑:的P3P策略被下面的根本原因,完整的说明。

时间:

我只需将这个小标题添加到 IFrame ( PHP解决方案) 中的站点,就可以使邪恶之眼消失:


header('P3P: CP="NOI ADM DEV COM NAV OUR STP"');

记得按 ctrl+F5 重新载入你的网站或者资源管理器可能仍显示邪恶的眼睛,尽管事实上它是工作工作正常。 这可能是为什么我有这么多问题让它工作的主要原因。

没有neccesary的策略文件。

编辑:我发现一个很好的博客条目,它解释了 Cookies 中的问题。 它还可以在 C# 代码中快速修复: 框架,ASPX页和被拒绝的Cookies

我也有这个问题,以为我会发布我在MVC2项目中使用的代码。 OnActionExecuting上的方法的时候要小心,否则将出现在页生命周期的你添加在标头 HttpException"磅Server服务器无法在发送HTTP标头后追加标头。"我用一个自定义


///<summary>
///Privacy Preferences Project (P3P) serve a compact policy (a"p3p" HTTP header) for all requests
///P3P provides a standard way for Web sites to communicate about their practices around the collection, 
///use, and distribution of personal information. It's a machine-readable privacy policy that can be 
///automatically fetched and viewed by users, and it can be tailored to fit your company's specific policies.
///</summary>
///<remarks>
///More info http://www.oreillynet.com/lpt/a/1554
///</remarks>
public class P3PAttribute : ActionFilterAttribute
{
///<summary>
///On Action Executing add a compact policy"p3p" HTTP header
///</summary>
///<param name="filterContext"></param>
 public override void OnActionExecuting(ActionExecutingContext filterContext)
 {
 HttpContext.Current.Response.AddHeader("p3p","CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"");

 base.OnActionExecuting(filterContext);
 }
}

示例用法:


[P3P]
public class HomeController : Controller
{
 public ActionResult Index()
 {
 ViewData["Message"] ="Welcome!";

 return View();
 }

 public ActionResult About()
 {
 return View();
 }
}

在 node.js. 中有这个问题的任何人

然后添加这个p3p模块,并在中间件上启用这个模块。

 
npm install p3p

 

我正在使用 express,所以我在 app.js 中添加它

首先需要 app.js 中的模块


var express = require('express');
var app = express();
var p3p = require('p3p');

然后使用它作为中间件


app.use(p3p(p3p.recommended));

它将在res对象处添加p3p头。 不需要做任何额外的事情。

你将获得更多信息:

https://github.com/troygoode/node-p3p

...