我正在查看一些 Web 代码,但我不太确定 ASP.net 会话状态是如何工作的。任何帮助将不胜感激。
如果在登录期间将 User 对象保存到会话状态,并且设置了 User.FirstName 和 User.LastName。如果其他网页从会话中检索用户对象并将 FirstName 设置为其他内容,那么该内容是否会保留在其他网页上?或者,一旦修改用户对象,您是否需要将其重新添加回会话?谢谢
会话保留在服务器上,但通过客户端进行跟踪。我重复一遍 - 通过客户。
在大多数情况下,会话是通过 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。
但是,考虑到问题的上下文(用户信息),将此信息存储在会话中是有效的,因为它仅与特定用户相关(不应共享)。
许多人使用的另一种替代方法是将用户信息放在会话中,而不是将其放入附加到表单身份验证票证的通用原则中。
看你选择哪条路。