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

Pan*_*kaj 8 c# asp.net-mvc c#-4.0 asp.net-mvc-3 asp.net-mvc-4

页面包含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();
}
Run Code Online (Sandbox Code Playgroud)

avs*_*099 9

我们有完全相同的问题 - 在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\"");
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. w3c在您的网站的根目录中创建文件夹(所谓的知名位置),p3p.xmlpolicy.p3p根据以下Microsoft指南上传和文件:如何在您的网站上部署P3P隐私政策

这是我的p3p.xml文件:

<META>
  <POLICY-REFERENCES>
    <POLICY-REF about="/w3c/policy.p3p">
      <INCLUDE>/</INCLUDE>
      <COOKIE-INCLUDE/>
    </POLICY-REF>
  </POLICY-REFERENCES>
</META>
Run Code Online (Sandbox Code Playgroud)

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

<?xml version="1.0"?>
<POLICIES xmlns="http://www.w3.org/2002/01/P3Pv1">
    <!-- Generated by IBM P3P Policy Editor version Beta 1.12 built 2/27/04 1:19 PM -->

    <!-- Expiry information for this policy -->
    <EXPIRY max-age="86400"/>

<POLICY
    xml:lang="uk">
    <!-- Description of the entity making this policy statement. -->
    <ENTITY>
    <DATA-GROUP>
    </DATA-GROUP>
    </ENTITY>

    <!-- Disclosure -->
    <ACCESS><nonident/></ACCESS>

    <!-- No dispute information -->

    <!-- Statement for group "Basic information" -->
    <STATEMENT>
        <EXTENSION optional="yes">
            <GROUP-INFO xmlns="http://www.software.ibm.com/P3P/editor/extension-1.0.html" name="Basic information"/>
        </EXTENSION>

    <!-- Consequence -->
    <CONSEQUENCE>
Data collected from all Web users: access logs, and search strings (if entered).</CONSEQUENCE>

    <!-- Use (purpose) -->
    <PURPOSE><admin/><current/><develop/></PURPOSE>

    <!-- Recipients -->
    <RECIPIENT><ours/></RECIPIENT>

    <!-- Retention -->
    <RETENTION><indefinitely/></RETENTION>

    <!-- Base dataschema elements. -->
    <DATA-GROUP>
    <DATA ref="#dynamic.clickstream"/>
    <DATA ref="#dynamic.http"/>
    <DATA ref="#dynamic.searchtext"/>
    </DATA-GROUP>
</STATEMENT>

    <!-- Statement for group "Cookies" -->
    <STATEMENT>
        <EXTENSION optional="yes">
            <GROUP-INFO xmlns="http://www.software.ibm.com/P3P/editor/extension-1.0.html" name="Cookies"/>
        </EXTENSION>

    <!-- Consequence -->
    <CONSEQUENCE>
Cookies are used to track visitors to our site, 
so we can better understand what portions of our site best serve you.</CONSEQUENCE>

    <!-- Use (purpose) -->
    <PURPOSE><develop/><tailoring/></PURPOSE>

    <!-- Recipients -->
    <RECIPIENT><ours/></RECIPIENT>

    <!-- Retention -->
    <RETENTION><business-practices/></RETENTION>

    <!-- Base dataschema elements. -->
    <DATA-GROUP>
    <DATA ref="#dynamic.cookies" optional="yes"><CATEGORIES><uniqueid/></CATEGORIES></DATA>
    </DATA-GROUP>
</STATEMENT>

<!-- End of policy -->
</POLICY>
</POLICIES>
Run Code Online (Sandbox Code Playgroud)


Mae*_*lyn 7

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

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

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


Ada*_*SFT 0

使用请求跟踪并查看传入的请求 cookie,或使用调试代理查看客户端(或浏览器调试工具)上的值。cookie 被关闭了吗?您的会话 GUID 每次从服务器到客户端时是否都会更改 - 在这种情况下,会话不会保持建立状态

  • @avs099 问题是会话为空。首先要检查的诊断事项之一是会话 ID 是否被保留。由于代码问题,会话仍然可能为空。OP中实际上根本没有提到Cookies。由于默认会话提供程序将重新生成 ID,这可以让您知道值是否被清除、保留等。这是一个鲜为人知的事情。我之前编写过会话提供程序代码,因此在此使用一些相关知识来尝试获取更多诊断信息。这有助于确定 cookie 是否到达客户端或返回服务器,这是必不可少的第一个跟踪步骤。 (2认同)