【发布时间】:2010-01-07 07:58:50
【问题描述】:
由于各种原因,我厌倦了 ASP.NET 会话状态,我正在尝试自己做(即将出现的另一个问题与我厌倦的原因以及我自己做这件事是否可行有关,但现在让我们假设它是)。
抛开安全问题不谈,跟踪会话似乎只涉及存储一个带有 guid 的 cookie 并将该 guid 与数据库中的一个小“会话”表相关联,该表以 guid 为键并包含少量字段对于链接到注册用户的会话,跟踪超时并链接到用户表中的主键。
但是,如果用户的浏览器未设置为接受 cookie,我对 cookie 的一个细节感到困惑。在我看来,每次用户访问任何启用了会话状态的页面时,ASP.NET 都必须确定浏览器是否支持 cookie。如果已经有随请求发送的会话 cookie,则显然它知道 cookie 已被接受。
如果没有,它似乎需要检查,据我了解,这涉及尝试写入 cookie 并重定向到尝试读取 cookie 的页面。因此,当关闭了 cookie 的用户访问网站的多个页面时,似乎 ASP.NET
(a) 必须对用户访问的每个页面进行此往返测试,或者
(b) 必须假设浏览器接受 cookie 并在每个页面上为用户创建一个带有(临时)会话 id 的记录——如果会话状态应该是持久的,它似乎必须写入初始状态每个页面上数据库的会话 ID。
但是 (a) 听起来很疯狂, (b) 听起来也很疯狂,因为我们会很快为所有这些单页会话累积会话 ID。因此,我认为必须有一些其他技巧/启发式方法用于知道何时进行往返测试和/或何时实际为会话创建记录。
我的困惑是错的吗?
(要清楚,我不是在谈论在 ASP.NET 的可插拔会话状态系统中实现自定义存储解决方案。我说的是完全跳过 ASP.NET 的会话状态系统。我的问题是更详细的版本这个:Implementing own Session Management in ASP.NET.)
【问题讨论】:
-
读了几次之后,我想我知道你想表达什么了。是的,(a)和(b)听起来确实很疯狂。希望有人能启发我们。
标签: asp.net session session-state