我有一个带有列表框控件的aspx页面。列表框是从页面加载时从服务检索的集合中填充的。当用户从列表框中选择一个项目时,页面会回发,在重新加载之前将检索到的对象添加到会话中。在重新加载时,我使用会话对象而不必再次调用服务。
这一切都正常,直到我从iFrame中访问该页面。当页面在iFrame中时,不会检索Session对象(Session [“blah”]为null)。当页面不在iFrame中时,此代码可以正常工作。
我正在使用IIS7和Windows Server 2008.在ISS中我是否需要做任何事情来允许在iFrame中使用Session变量?有没有人知道可能导致这种情况发生的任何其他事情?
谢谢, 尼尔
答案 0 :(得分:10)
IE对iframe中加载的第三方内容的信任度较低。这会阻止会话cookie。
您可以通过在IIS中设置P3P标头来解决此问题:
Name = p3p
Value = CP="IDC DSP COR CURa ADMa OUR IND PHY ONL COM STA"
答案 1 :(得分:4)
实际上没关系,我只是清除了C:\Windows\Microsoft.NET\Framework64\v2.0.50727\Temporary ASP.NET Files
中的文件并重新启动了IIS并且它全部正常工作
答案 2 :(得分:4)
就我而言,该项目是.net Framework 4.6.1。我已经升级到4.7.2版本,并将以下密钥添加到了web.config
<system.web>
<sessionState cookieSameSite="None"/>
通过这种方式,第三方Iframe会话开始工作。
在进行此更改之前,最好先阅读一下 https://docs.microsoft.com/en-us/aspnet/samesite/system-web-samesite
答案 3 :(得分:0)
自 2021 年起,Chrome(可能还有其他)要求保护 cookie。
这可以通过这种方式实现:
<system.web>
<httpCookies httpOnlyCookies="true" requireSSL="true" sameSite="None" />
</system.web>
答案 4 :(得分:-3)
要在iFrame中启用会话: InterNet选项 - &gt;隐私 - &gt;高级 - &gt;选中&#34;始终允许会话Cookie&#34;