页面位于 iFrame 中时未保存会话变量

Posted

技术标签:

【中文标题】页面位于 iFrame 中时未保存会话变量【英文标题】:Session Variables not saved when page is in an iFrame 【发布时间】:2011-09-16 03:50:33 【问题描述】:

我有一个带有列表框控件的 aspx 页面。列表框由页面加载时从服务中检索到的集合填充。当用户从列表框中选择一个项目时,页面回发,在重新加载之前将检索到的对象添加到会话中。在重新加载时,我使用会话对象而不必再次调用服务。

这一切正常,直到我从 iFrame 中访问该页面。当页面位于 iFrame 中时(Session["blah"] 为空),不会检索 Session 对象。当页面不在 iFrame 中时,此代码可以完美运行。

我正在使用 IIS7 和 windows server 2008。我需要在 ISS 中做些什么来允许在 iFrame 中使用 Session 变量吗?有谁知道可能导致这种情况发生的其他任何事情?

谢谢, 尼尔

【问题讨论】:

你是在所有浏览器中还是只有IE有这个问题? 您是否在框架内回帖。还是您要发回容器页面?如果是后者,它将不知道用户对框架中的页面所做的更改。 不,iFrame 对父页面没有任何了解,也不需要它。父页面仅用于导航。我只使用 IE,因为它是 Dynamics CRM 2011 中的一个页面,它只适用于 IE,所以我无法用其他浏览器对其进行测试。我将尝试使用 iFrame 创建一个基本的 html 页面,看看在 IE 和其他浏览器中是否发生同样的问题 其实没关系,我只是清除了 `C:\Windows\Microsoft.NET\Framework64\v2.0.50727\Temporary ASP.NET Files` 中的文件并重新启动了 IIS,一切正常。 @neil:考虑使用这些信息创建一个答案,以便这个问题可以被接受和关闭,其他人可能会从您的解决方案中受益。 【参考方案1】:

IE 对 iframe 中加载的第 3 方内容的信任度较低。这会阻止会话 cookie。

您可以通过在 IIS 中设置 P3P 标头来解决此问题:

Name = p3p
Value = CP="IDC DSP COR CURa ADMa OUR IND PHY ONL COM STA"

另见

Cookie blocked/not saved in IFRAME in Internet Explorer Compact P3P settings with IIS7

【讨论】:

【参考方案2】:

其实没关系,我只是清除了C:\Windows\Microsoft.NET\Framework64\v2.0.50727\Temporary ASP.NET Files中的文件并重新启动了IIS,一切正常

【讨论】:

正是我刚刚所做的...... .ASP.net 中的缓存控制非常糟糕,为什么这个东西不会使代码本身过期我只是想知道......为什么是微软。【参考方案3】:

要在 iFrame 中启用会话: 互联网选项 -> 隐私 -> 高级 -> 勾选“始终允许会话 Cookie”

【讨论】:

您不能合理地期望您网站的每个访问者都这样做【参考方案4】:

就我而言,该项目是 .net 框架 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

【讨论】:

非常感谢您的回答。这个答案解决了我的问题。 谢谢!当我使用 Target .NET 4.8 版在 Azure 上部署网站时,它对我有用。无法在使用旧 Windows 2009 R2 的 QA 服务器上运行。 可能需要使 cookie 安全:【参考方案5】:

自 2021 年起,Chrome(可能还有其他)要求 cookie 是安全的。

这可以通过这种方式实现:

<system.web>
  <httpCookies httpOnlyCookies="true" requireSSL="true" sameSite="None" />
</system.web>

【讨论】:

以上是关于页面位于 iFrame 中时未保存会话变量的主要内容,如果未能解决你的问题,请参考以下文章

PHP 会话数据未保存

会话变量未在Response.Redirect上维护

数据未保存在会话变量中

使用 AJAX 设置时未保存 Django 会话变量

当session会话结束时,重定向到登录页显示在iframe框内的问题

会话变量未结转