gpt4 book ai didi

asp.net-mvc-2 - iframe、跨域 cookie、p3p 策略和 safari 出现错误 : A required anti-forgery token was not supplied or was invalid

转载 作者:行者123 更新时间:2023-12-02 17:46:17 25 4
gpt4 key购买 nike

我问了这个question不久前,发现 IE 会阻止 iframe 中的跨域 cookie,除非您设置 p3p policy 。到目前为止,p3p 修复在 ie 中运行良好。然而,现在我们在 safari 中遇到了同样的错误。

我发现一篇文章有​​不同的 p3p policy Safari 。我添加了此代码来设置 p3p 策略,但仍然收到请求验证 token 错误。

public static void SetP3PCompactPolicy()
{
HttpContext current = HttpContext.Current;

if (current.Request.UserAgent.ToLower().IndexOf("safari") >= 0)
HttpContext.Current.Response.AddHeader("p3p", "CP=\"IDC DSP COR CURa ADMa OUR IND PHY ONL COM STA\"");
else
HttpContext.Current.Response.AddHeader("p3p", "CP=\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\"");
}

我不确定这意味着什么,但它不适用于 Safari (5)。

此外,当我收到服务器错误时,所有信息都会在报告中发送给我,包括所有 http header 。在这些错误中,p3p header 永远不会出现。我不确定这是否是设计使然,或者是否表明问题正在发生。

最佳答案

问题是 Safari 不允许在 iframe 中设置 cookie,除非用户与该 iframe 交互。对于某些人来说,这意味着点击链接。我找到了一个更好的解决方案,那就是进行重定向。

首先,我将此表单放在我的页面上。实际上,我将其放在 iframe 中提供的每个 View 所使用的母版页中。

<% if(SecurityHelper.BrowserIsSafari) { %>
<% using (Html.BeginForm("SafariRedirect", "Framed", FormMethod.Post, new { id="safari-fix-form" })) { %>
<%: Html.Hidden("safariRedirectUrl")%>
<% } %>
<% } %>

因为我只希望它在用户使用 safari 时起作用,所以我在静态帮助器类中创建了此属性来检查用户代理

public static bool BrowserIsSafari
{
get { return HttpContext.Current.Request.UserAgent.ToLower().IndexOf("safari") >= 0; }
}

然后,在我的 Controller 中,我执行以下操作

[HttpPost]
public ActionResult SafariRedirect(string safariRedirectUrl)
{
Response.Cookies.Add(new HttpCookie("safari_cookie_fix", "cookie ok"));

return Redirect(safariRedirectUrl);
}

在我的母版页的标题中,我在同一个 if 语句中声明了我的脚本,该 if 语句确定是否呈现表单。在我的脚本文件中,我有这个 jquery

$(function () {

if ($.browser.safari == true && document.cookie.indexOf("safari_cookie_fix") == -1) {
var url = location.href;

$('#safariRedirectUrl').val(url);
$('#safari-fix-form').submit();
}

});

iframe 第一次加载页面时,如果是 safari 并且未设置 cookie,则会发布表单,设置 cookie,并将用户重定向回相同的 url。

关于asp.net-mvc-2 - iframe、跨域 cookie、p3p 策略和 safari 出现错误 : A required anti-forgery token was not supplied or was invalid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6125741/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com