我正在构建一个将显示在 iframe 中的站点/应用程序。我以前做过很多次,过去给我带来了很多问题……主要问题是跨域 cookie 被阻止。
我知道这是使用相同的根域名和设置 document.domain 的问题。但是考虑到可爱的新欧盟 cookie 立法(天哪,他们是蹩脚的)和浏览器在隐私和安全方面的总体方向,在 iframe 中使用会话 cookie 可能会变得越来越麻烦。因此,为了让网站稍微适应未来,我宁愿在不使用 cookie 的情况下实现它。
到目前为止,我的实现只是设置了一个查询字符串值,它被传递到所有页面。我猜这有点像 ASP.NET 的无 cookie 会话功能。然而,这意味着如果有人使用公共计算机,稍后使用它的另一个人可以找到他们的 URL(包括会话 ID)并继续他们的会话。由于本网站处理不可接受的敏感数据。ASP.NET 无cookie 功能也存在同样的漏洞(这让我对找到解决方案有点悲观)。
我正在.NET 中开发,但这必须是所有环境的通用问题。
精简版:
有谁知道如何在 iframe 内运行的无 cookie 站点中维护会话状态(也许还有一些最佳实践)。当用户关闭他的浏览器时,必须有效地终止会话,因此浏览器历史列表不会泄露任何信息 - 就像使用普通会话 cookie 一样。
可能的解决方案
我正在考虑这些方面的事情。但这远非最佳。
- 页面不断向服务器发出保持活动的 ajax 请求
- 服务器使用存储在查询字符串中的 ID 的最后一次 keep-alive 调用更新时间戳
- 如果 keepalive 时间戳超过 10 秒,则与 ID 相关的数据将被终止,如果用户重新访问具有现在已死 ID 的 URL,则会收到“会话超时 - 请重新开始”消息。