【发布时间】:2009-06-17 15:53:36
【问题描述】:
在 ASP.NET 中,会话是针对浏览器的。但是如何为选项卡创建会话?
【问题讨论】:
标签: asp.net session browser session-state
在 ASP.NET 中,会话是针对浏览器的。但是如何为选项卡创建会话?
【问题讨论】:
标签: asp.net session browser session-state
使用以下内容:
<configuration>
<system.web>
<sessionState cookieless="true"
regenerateExpiredSessionId="true" />
</system.web>
</configuration>
还有一个citation from MSDN:
ASP.NET 维护无 cookie 会话 通过自动插入一个状态 页面 URL 中的唯一会话 ID。 例如,下面的 URL 有 已被 ASP.NET 修改为包含 唯一的会话 ID lit3py55t21z5v55vlm25s55:
http://www.example.com/(S(lit3py55t21z5v55vlm25s55))/orderform.aspx
当 ASP.NET 向 浏览器,它会修改 使用应用程序相关的页面 通过嵌入会话 ID 值的路径 在链接中。 (绝对链接 路径未修改。)会话状态 只要用户保持 点击已修改的链接 以这种方式。但是,如果客户端 重写由 应用程序,ASP.NET 可能无法 解析会话 ID 和 将请求与现有的 会议。在这种情况下,一个新的会话 为请求启动。
因此,为新标签打开新会话只需打开一个不带会话标识符的网址。
编辑:
正如其他用户所提到的,您应该注意这个“功夫”。如果您在会话中存储用户敏感信息 - 请secure your authentification cookies。
编辑2:
请注意,当您在 url 中使用会话密钥时,用户可以将其复制并发送给一些朋友。并且该用户和他的朋友将共享单个会话(这将是一个很棒的功能!:))。为避免这种情况,您可以执行以下操作:
1. 在 onSessionStart 方法中以某种方式添加到用户(用户的配置文件,存储在数据库中)的关联,并在 BeginRequest 上检查它。
2.当referrer为空或不等于当前域时,检查referrer并创建新会话(重定向到无会话url)(但要注意,referrer可以手动设置)
3. 重写会话 ID 的生成并将其与用户名和 ip/mac(xor 或类似的东西)相关联。并在接听会话时在舞台上验证这一点。
4. 使此会话密钥仅对当前用户有效的其他方法。
【讨论】:
会话 cookie 保存在该浏览器实例可访问的易失性存储中。您将需要一个支持您所追求的概念的浏览器,据我所知,不存在这样的浏览器。
在 ASP.NET 中,您可以在不使用会话 cookie 的情况下维护会话,它真的很丑,我不推荐它,但它可能是您实现目标的一种方式。
【讨论】: