- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我问了这个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/
我是一名优秀的程序员,十分优秀!