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