我们有一个网站(www.example.com)将用户发送到一系列第三方网页,以验证我们在iframe中执行的付款详细信息.最初,来自www.example.com的本地页面加载到iframe中,并且用户被重定向到第三方URL.一旦用户完成第三方步骤,他们就会被重定向回iframe中我们网站(www.example.com)上的页面.
这适用于我们测试的所有浏览器,除了IE 11,我们的cookie似乎丢失了.我们已经在桌面和"Metro"模式下在Windows 7和8.1下进行了检查,问题出在所有版本中.
当用户浏览我们的网站时,我们设置了一个会话cookie,该cookie正确地发送到最初在iframe中加载的第一方页面.但是,一旦用户浏览了此iframe中的某些第三方网页,会话Cookie就不会与下一个请求一起发送.
如果我们将IE 11的隐私设置设置为最低值,则此问题将消失,并且按预期工作.
到目前为止,我出现的所有潜在解决方案都与P3P标头有关.我们有一个有效且正确的P3P标头和XML策略文件设置,这个问题只发生在IE 11中.
更新:我们使用JS设置了一些其他cookie.这些都像预期的那样持续存在.差异是到期日期(JS cookie为1年,会话cookie为1个月),域(JS cookie明确为"example.com",会话cookie为空)以及它们是否为"仅HTTP"(JS为false) cookies,适用于会话cookie).
我已经尝试根据会话cookie的JS cookie设置所有这些选项,但它没有任何区别.
更新2:经过更多测试后,我无法创建重新创建此问题的测试用例.我尝试在实时代码中测试的任何其他cookie似乎也会被破坏,即使它们设置的代码与JS cookie完全相同.简而言之; 我还没有找到任何有用的cookie和有效的cookie.
一个可能有趣的事情是,cookie没有被删除,它们只是没有被发送到最终请求.如果加载了另一个页面,cookie会神奇地重新出现并被发送; 这让我相信这是一个围绕iframe和P3P的错误.
更新3(第3天): IE 11对cookie的处理继续让我感到困惑.我进入微软的迷宫越远,我就越失去其变幻的墙壁.这里有幽灵.半梦的安全政策的片段,它们已经融入了一些空灵的生物,它在每一个动作中追踪和嘲弄我.起初,我被冻结,惊恐,惊恐地看着刚刚看不见的几乎不可思议的形状,但是每过一个小时,我就会从仅靠近处的知识中获得更多的安慰.这可能是我被派到这里面对的野兽吗?在这种时候我怎么能杀死我唯一的伴侣?
Evernote的书签能够做到这一点,因此即使赏金将以非生产性的方式进行,最受欢迎的答案也不会回答这个问题.
我必须从域B.com调用域A.com(使用http设置cookie).我在域名B.com上所做的就是(javascript):
var head = document.getElementsByTagName("head")[0];
var script = document.createElement("script");
script.src = "A.com/setCookie?cache=1231213123";
head.appendChild(script);
Run Code Online (Sandbox Code Playgroud)
这会在我测试的每个浏览器上设置A.com上的cookie,但Safari除外.令人惊讶的是,即使没有P3P标头,这也适用于IE6.
有没有办法在Safari中使这项工作?
首先,我在发布这个问题之前做过一些研究,所以我知道P3P政策和MSDN的相关文章.据我所知,这项政策主要(如果不是)适用于IE6.我的具体问题是IE9.此外,我做的第一件事就是建立一个策略(它有效,因为它在IE的隐私报告中显示了摘要).
我的测试用例如下:我有一个包含iframe的页面.iframe文档Set-Cookie:sid=2b5540e0e4f27075ca4709851700137d; expires=Tue, 28-Jun-2011 07:27:41 GMT; path=/为根路径上的当前域设置会话cookie(完整的HTTP标头:),该会话cookie 在一周内到期.没有问题,这已经在生产中运行(独立,而不是在iframe中)一段时间了.
问题是:iframe文档有一些javascript首先执行一些HTTP请求(由jQuery完成),然后重定向用户(通过更改document.location属性).请求会发送cookie,但重定向不会.
我已经在IE中捕获了网络事件,我可以找到的两种请求之间的唯一区别是发起者:XHR由JS库完成,另一个是通过单击完成.但是我真的怀疑点击不会发送cookie.
我想知道为什么我的cookie没有发送,谷歌分析cookie被发送,所以它应该是可能的.
更新: 这绝对是一个隐私区域问题:当将IE中的隐私栏设置降低到所有时,它可以工作.其他设置都失败了.
我已经创建了一个精确的测试床:这是正在使用的实际iframe.要测试它,你必须填写荷兰邮政编码(抱歉;)),使用的占位符很好:1234 AB和1.提交后你得到一个模态,当它完成后你应该被重定向到结果页面.在IE中,重定向显示与您开始时完全相同的页面(因为没有设置cookie).
我的公司有一个插入购物车的小部件.我们遇到了一个问题,即在IE7中设置cookie不起作用.发生这种情况是因为我们是第三方,因为我们通过iframe嵌入到网站中.
我看过几篇帖子说解决这个问题的方法是在标题中加入一个P3P紧凑策略.如上所述:
Cookie已阻止/未保存在Internet Explorer的IFRAME中
我已经验证我的P3P策略在我的HTTP标头中.它实际上适用于购物车网站的第一页/步骤,但只要页面上有个人信息(如姓名,地址,电话等),IE就会阻止我的网站和我的cookie.
我尝试了几种不同的P3P策略,它们都不能在同一个地方工作.我还使用IBM P3P工具生成我自己的特殊P3P策略,但它仍然不起作用.
我完全失去了.
Internet Explorer 9不会使用我的AJAX请求发送会话cookie.
当我通过AJAX向我的API发出身份验证请求时,它会返回一个设置会话cookie的响应.通过AJAX对API的后续调用不会将cookie发送回服务器.
API位于同一主机上.同样,常规的非AJAX页面请求也不会显示会话cookie.我关闭了Internet选项中的所有隐私和安全设置.Chrome会正确发送Cookie.
如何让IE返回cookie?谢谢!
会话cookie在Chrome和Firefox中运行良好,但是对于IE9和AJAX请求,我丢失了所有会话cookie.
直接请求查看
public class AddressController : Controller
{
[MvcSiteMapNode(Title = "Addresses", ParentKey = "MyAccount", Key = "Addresses")]
public ActionResult Index()
{
....
var memberId = GetKeyValues.GetMemberId(); // This works perfect.
...
}
Run Code Online (Sandbox Code Playgroud)
Ajax调用
$.ajax({
url: "/Address/CheckPrimaryAddressGood?t="+ Math.random(),
type: "Get",
success: function(data) {
...
public class AddressController : Controller
{
public ActionResult CheckPrimaryAddressGood()
{
...
var memberId = GetKeyValues.GetMemberId();
...
}
}
public static class GetKeyValues
{
public static string GetMemberId()
{
if (HttpContext.Current.Session[keyCookie] != null)
{
memberId = GetMemberIdFromSession();
} …Run Code Online (Sandbox Code Playgroud) 我们正在使用node.js和meteor.js开发一个应用程序,这个应用程序在Firefox,Chrome和IE 10中运行良好,但是当我们尝试在IE-9中浏览这个应用程序时,它没有加载.
我已经调查了两个浏览器(IE9,Firefox)的请求/响应,我发现对于XHR请求,IE 9使用iframe轮询而不是Web套接字进行数据传输.IE 9在这种情况下不维护cookie,并且每个XHR请求都会导致401错误.所以cookie不会在IE 9的iframe中发送.
我已经调查了如何为iframe启用cookie,我发现我们可以使用隐私政策平台(p3p)实现这一目标.要启用p3p,您必须在域文件夹内的w3c文件夹中的响应头和privacy.policy文件中添加p3p密钥.我做了所有这些.
但事情并非在我的情况下,我做了很多研发来设置p3p的不同-2键.但仍然面临在IE9中加载应用程序的问题.
我有一个iframe:
我找到了一个解决方法:
Response.AddHeader("Pragma", "no-cache");
Response.AddHeader("Cache-Control", "no-cache");
Run Code Online (Sandbox Code Playgroud)
但它没有帮助.mb任何人都知道什么可以解决这个问题?
我们正在使用Laravel 5制作微型网站,它们作为Iframe包含在另一个网页中.
Internet Explorer存在问题,即会话cookie在iframe中不起作用.
因此,我们开发了一个非常hacky的解决方案,以保持URL中的会话ID.
我想知道是否有一个现成的解决方案(我将在以后发布我的解决方案作为答案/制作一个很好的模块,如果还没有一个好的解决方案)
我们正在使用keycloak 1.3.1身份验证库,我注意到一旦我初始化了keycloak { onLoad: 'login-required' },IE(11)就会获得无限循环......
其他浏览器工作正常.
我基本上是这样做的:
keycloak.init({ onLoad: 'login-required' }).success(function(authenticated) {
console.info(authenticated ? 'authenticated' : 'not authenticated');
some other stuff...
}).error(function() {
console.warn('failed to initialize');
});
Run Code Online (Sandbox Code Playgroud)
知道是什么导致它,并解决这个问题?尝试安装最新版本1.4.0,希望奇怪的bug得到解决.
提前致谢.
cookies ×7
iframe ×3
javascript ×3
ajax ×2
cross-domain ×2
p3p ×2
angularjs ×1
asp.net-mvc ×1
cross-site ×1
jquery ×1
keycloak ×1
laravel ×1
meteor ×1
node.js ×1
php ×1
redirect ×1
safari ×1
security ×1
session ×1