我想维护每个浏览器选项卡的会话状态.

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

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

推荐答案

要方便一个用户使用多选项卡会话状态,而不会弄乱URL,请执行以下操作.

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

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

将内容保存到会话状态时,请包含页面ID:

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

Notes:

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

Asp.net相关问答推荐

设置主键时KeyAttribute属性不起作用

在这个 For 循环计数没有增加

登录成功后 User.Identity.IsAuthenticated 为 false

OnCheckedChanged 事件未触发

如何在页面的基类中执行 Page_Load()?

文本框的输入按键触发事件

如何在 ASP.NET Web API 中使用非线程安全的 async/await API 和模式?

在 C# 中将 IHtmlContent/TagBuilder 转换为字符串

UseSqlServer 方法缺少 MVC 6

问题映射 HttpHandler --> HTTP Error 404 Not Found

Razor 主机工厂错误

从命令行复制 VS2008发布网站

对 ASP.NET 2.0 网页进行单元测试的最佳方法是什么?

使用 VirtualPathProvider 从 DLL 加载 ASP.NET MVC 视图

在资源文件中使用 HTML

将对象传递给 HTML 属性

无法使用 ip:port 访问 WEB API,但可以在 VS 调试模式下使用 localhost:port

System.Drawing.Image.FromFile() 上的内存不足异常

Session.Clear() 与 Session.RemoveAll()

在 ASP.NET 中使用 SecureString 有什么好处吗?