仅在safari浏览器中ASP.net MVC中的IFrame中的会话为null

页面包含IFrame,只有在Safari的情况下,会话才为空。 我的Safari版本是5.1.7

我正在使用MVC 4.5 Everything在其他浏览器中完美运行。 我使用以下代码..

protected override void OnResultExecuting(ResultExecutingContext filterContext) { base.OnResultExecuting(filterContext); filterContext.HttpContext.Response.AddHeader("p3p", "CP=\"CAO PSA OUR\""); GetFirstError(); } 

我们有完全相同的问题 – 在ASP.Net MVC项目中,FB应用程序无法在Safari中运行。 以下是我们修复它的方法:

  1. 将P3P标头添加到所有重新发布。 您可以在IIS服务器级别配置它: http : //support.microsoft.com/kb/324013 – 或直接在global.asax中执行:

     protected void Application_BeginRequest(Object sender, EventArgs e) { HttpContext.Current.Response.AddHeader("P3P", "CP=\"NOI CURa ADMa DEVa TAIa OUR BUS IND UNI COM NAV INT\""); } 
  2. 在您的网站根目录中创建w3c文件夹(所谓的知名位置),并根据以下Microsoft指南将p3p.xmlpolicy.p3p文件上传到其中: 如何在您的网站上部署P3P隐私策略

这是我的p3p.xml文件:

    /     

和policy.p3p(对不起,它很长,但我不知道如何隐藏它作为扰流板):

                      Data collected from all Web users: access logs, and search strings (if entered).                     Cookies are used to track visitors to our site, so we can better understand what portions of our site best serve you.               

安装Safari时默认情况下不接受第三方cookie。 这意味着当您访问域A并将域B嵌入到iframe中时,在用户与iframe的内容进行交互之前,它不会接受来自B的Cookie。

在开发需要会话的Facebook应用程序时,这种情况让我非常不满意,客户端不接受告诉用户启用第三方cookie的解决方案。 这是我实施的解决方法,并且从那时开始工作:

  • 检查User-Agent标头是否包含字符串Safari
  • 检查我们是否完全没有cookie
  • 如果上述两种情况都属实,请向我的域发出一个javascript重定向到一个特殊的cookiefix页面(意思是以下输出: ) – 需要JS来淘汰iframe
  • 在该页面上除了设置虚拟会话变量之外什么也不做
  • 重定向到原始页面并享受我的会话cookie,这在技术上是第三方cookie但它已经被接受并且不需要

使用请求跟踪并查看传入的请求cookie或使用调试代理查看客户端(或浏览器调试工具)上的值。 cookies是否已关闭? 每次从服务器到客户端时,您的会话guid是否会发生变化 – 在这种情况下,会话不会保持建立状态

一种方法是DisAllow cookie永远不会阻止它。 以下方式。

转到首选项。
选择隐私
永远不要阻止Cookies