我正在使用带有JQuery的MVC使用提供商托管的应用程序,并且需要在SharePoint页面的iframe中显示提供商托管应用程序,以使其看起来像是集成在SharePoint中。此应用程序包含一个报告查看器(版本10.0.0.0),显示' Asp.net会话已过期或无法找到'在IE10或更高版本中查看时。在任何其他浏览器(Chrome,Mozilla)中查看时,SharePoint页面中的此应用程序可以正常工作,但在IE中则不行。
观察:
已尝试过的事情:
这些都不适用于我的场景,而且我正在努力工作一周。这似乎是第一次注册问题,当应用程序直接打开时,它会被注册并运行。任何帮助将受到高度赞赏。
P.S。:我已在web.config文件中注册了报告查看器。
感谢。
答案 0 :(得分:0)
所以大家终于解决了我自己的问题。感谢mwwallace8在评论中提供的提示。
问题: IE不允许我们以Cookie的形式存储第三方会话数据。这是因为它对iframe页面的信任度较低,因此iframe的会话数据不会存储在Cookie中。因此,当我们提交表单并进行发布呼叫时,服务器不会在请求中接收任何会话数据,并认为这是第一个请求。此过程会生成一个新的会话ID,并将其发送回响应中。当响应返回时,响应中的会话ID和新的会话ID会认为上一个会话已过期。这会产生上述问题。
与我们直接在新标签中打开应用程序不同,它将其视为第一方,并以cookie的形式存储其会话数据。 因此,一旦我们直接在新标签中打开应用程序,一切都运行得很完美。
解决方案: IE需要P3P标头(隐私首选项平台)来验证iframe中运行的会话。此标头将说明iframe会话的意图是什么以及它将从浏览器cookie中获取哪种数据。在进入IT公司之前,它会刷入Access卡。那么问题是如何生成这个P3P头?答案如下:转到web.config文件并在配置标记
中添加此代码<system.webServer>
<httpProtocol>
<customHeaders>
<add name="p3p" value="CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT""/>
</customHeaders>
</httpProtocol>
</system.webServer>
这将创建一个标头证书,即P3P标头证书,它将验证iframe会话数据以存储在浏览器cookie中。
要了解这些值的实际含义,请转到This Link。您可以在这里找到有关P3P标头的大量信息。
希望这可能有助于某人。
干杯..