asp.net - 会话 - 多个浏览器选项卡 - 不同的会话?

问题描述:

我想为每个浏览器标签维护一个会话状态.

I'd like to maintain a session state per browser tab.

这在 ASP.NET 中容易(甚至可能)做到吗?

Is this easy (or even possible) to do in ASP.NET?

示例:用户在 Firefox 中按 Ctrl-T 5 次并在每个选项卡中访问该站点.我希望每个选项卡在服务器上都有自己的会话状态

Example: A user hits Ctrl-T in firefox 5 times and visits the site in each tab. I'd like each tab to have its own session state on the server

要在不弄乱 URL 的情况下促进一个用户的多选项卡会话状态,请执行以下操作.

To facilitate multi-tab session states for one user without cluttering up the URL, do the following.

在你的表单加载函数中,包括:

In your form load function, include:

If Not IsPostback Then
  'Generate a new PageiD'
  ViewState("_PageID") = (New Random()).Next().ToString()
End If

当您将某些内容保存到会话状态时,请包含 PageID:

When you save something to your Session State, include the PageID:

Session(ViewState("_PageID").ToString() & "CheckBoxes") = D

注意事项:

  • 与一般的会话 ID 一样,您不能相信恶意查看者不会更改会话 ID/页面 ID.对于所有用户都可以信任的环境,这只是一个有效的解决方案.幸运的是,ViewState 确实提供了比使用隐藏输入字段更多的保护.
  • 在 PostBack 恢复 ViewState 之前,您将无法访问 PageID.因此,您将无法访问 page_init() 处理程序中的 PageID.