微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

iframe,跨域cookie,p3p策略和safari出现错误:未提供必需的防伪令牌或该令牌无效

如何解决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 举报,一经查实,本站将立刻删除。