0

我正在构建一个将显示在 iframe 中的站点/应用程序。我以前做过很多次,过去给我带来了很多问题……主要问题是跨域 cookie 被阻止。

我知道这是使用相同的根域名和设置 document.domain 的问题。但是考虑到可爱的新欧盟 cookie 立法(天哪,他们是蹩脚的)和浏览器在隐私和安全方面的总体方向,在 iframe 中使用会话 cookie 可能会变得越来越麻烦。因此,为了让网站稍微适应未来,我宁愿在不使用 cookie 的情况下实现它。

到目前为止,我的实现只是设置了一个查询字符串值,它被传递到所有页面。我猜这有点像 ASP.NET 的无 cookie 会话功能。然而,这意味着如果有人使用公共计算机,稍后使用它的另一个人可以找到他们的 URL(包括会话 ID)并继续他们的会话。由于本网站处理不可接受的敏感数据。ASP.NET 无cookie 功能也存在同样的漏洞(这让我对找到解决方案有点悲观)。

我正在.NET 中开发,但这必须是所有环境的通用问题。

精简版:

有谁知道如何在 iframe 内运行的无 cookie 站点中维护会话状态(也许还有一些最佳实践)。当用户关闭他的浏览器时,必须有效地终止会话,因此浏览器历史列表不会泄露任何信息 - 就像使用普通会话 cookie 一样。

可能的解决方案

我正在考虑这些方面的事情。但这远非最佳。

  1. 页面不断向服务器发出保持活动的 ajax 请求
  2. 服务器使用存储在查询字符串中的 ID 的最后一次 keep-alive 调用更新时间戳
  3. 如果 keepalive 时间戳超过 10 秒,则与 ID 相关的数据将被终止,如果用户重新访问具有现在已死 ID 的 URL,则会收到“会话超时 - 请重新开始”消息。
4

1 回答 1

2

我知道这是使用相同的根域名并设置 document.domain 的问题

否 - 使用单点登录是一种更明智的方法(尽管仍然使用 cookie)

但考虑到可爱的新欧盟 cookie 立法(天哪,他们是蹩脚的)

阅读它,特别是注释 25 和 26。有大量的退出条款。提供详细说明隐私信息的页面仍然是一种很好的做法和服务,这可能足以甚至超过该法案规定的任何义务。但请务必设计您的网站以检测用户不接受 cookie 的位置并使其做出适当响应。

我宁愿完全不使用 cookie 来实现它。

相信我,你不会。您已经提到通过 URL 传播会话 id - 这是唯一接近替代品的东西,但除了您提到的安全问题之外,它还非常脆弱和限制性(例如,对于您的 ajax 调用,您将必须解析当前 url 以提取会话 id 并将其插入到后续请求中)。

请注意,所有这些都假设您的站点需要在服务器端保留状态(这在某种程度上暗示了敏感数据和身份验证)。

于 2011-08-31T16:33:06.610 回答