在 ASP.NET 中保存和检索会话状态值

Bob*_*bbo 5 c# asp.net

我正在查看一些 Web 代码,但我不太确定 ASP.net 会话状态是如何工作的。任何帮助将不胜感激。

如果在登录期间将 User 对象保存到会话状态,并且设置了 User.FirstName 和 User.LastName。如果其他网页从会话中检索用户对象并将 FirstName 设置为其他内容,那么该内容是否会保留在其他网页上?或者,一旦修改用户对象,您是否需要将其重新添加回会话?谢谢

RPM*_*984 5

会话保留在服务器上,但通过客户端进行跟踪。我重复一遍 - 通过客户。

在大多数情况下,会话是通过 cookie 进行跟踪的。因此,使用您的示例,当 User 对象保存到 Session 时:

Session["UserInfo"] = new User { FirstName = "Joe", LastName = "Bloggs" };
Run Code Online (Sandbox Code Playgroud)

一个带有唯一标识符的 cookie 将被发送到客户端。该 cookie 会被传递给来自该客户端/浏览器的所有进一步的 HTTP 请求,除非它过期。

如果另一个用户第一次出现(来自不同的机器),Session["UserInfo"]则将为空。

cookie 的替代方案是“cookieless-session”——不使用 cookie 来存储会话标识符,而是将标识符附加到 URL 上。

所以答案是否定的 - 其他网页(例如其他客户端/机器/浏览器)将无法访问此信息。

如果您希望在不同客户端之间共享来自 Web 服务器的信息,请使用Cache

但是,考虑到问题的上下文(用户信息),将此信息存储在会话中是有效的,因为它仅与特定用户相关(不应共享)。

许多人使用的另一种替代方法是将用户信息放在会话中,而不是将其放入附加到表单身份验证票证的通用原则中。

看你选择哪条路。