如何解决iframe,跨域cookie,p3p策略和safari出现错误:未提供必需的防伪令牌或该令牌无效
| 不久前,我问了这个问题,发现除非您设置p3p策略,否则IE会阻止iframe中的跨域Cookie。到目前为止,p3p修复在ie中运行良好。但是,现在我们在野生动物园中遇到了相同的错误。 我发现了一篇关于Safari的p3p政策不同的文章。我添加了此代码来设置p3p策略,但仍然收到请求验证令牌错误。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标头。 p3p标头永远不会出现这些错误。我不确定这是设计使然还是该问题继续存在的指示。
解决方法
问题是,除非用户与该iframe进行交互,否则Safari不允许在iframe中设置Cookie。对于某些人来说,这意味着单击链接。我找到了一个更好的解决方案,那就是重定向。
首先,我将此表格放在页面上。实际上,我将其放在iframe中服务的每个视图所使用的母版页中。
<% if(SecurityHelper.BrowserIsSafari) { %>
<% using (Html.BeginForm(\"SafariRedirect\",\"Framed\",FormMethod.Post,new { id=\"safari-fix-form\" })) { %>
<%: Html.Hidden(\"safariRedirectUrl\")%>
<% } %>
<% } %>
因为我只希望此功能在用户使用野生动物园时起作用,所以我在静态帮助器类中创建了此属性以检查useragent
public static bool BrowserIsSafari
{
get { return HttpContext.Current.Request.UserAgent.ToLower().IndexOf(\"safari\") >= 0; }
}
然后,在我的控制器中,我将执行以下操作
[HttpPost]
public ActionResult SafariRedirect(string safariRedirectUrl)
{
Response.Cookies.Add(new HttpCookie(\"safari_cookie_fix\",\"cookie ok\"));
return Redirect(safariRedirectUrl);
}
在我的母版页眉的标题中,我的脚本在同一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被设置,并且用户将被重定向回相同的网址。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。