【发布时间】:2010-12-20 11:02:40
【问题描述】:
我正在查看一些 Web 代码,但我不确定 ASP.net 会话状态是如何工作的。任何帮助将不胜感激。
如果在登录期间将用户对象保存到会话状态,并且设置了 User.FirstName 和 User.LastName。如果其他网页从会话中检索用户对象并将 FirstName 设置为其他内容,是否会保留在其他网页上?或者,一旦用户对象被修改,您是否需要将其重新添加回会话?谢谢
【问题讨论】:
我正在查看一些 Web 代码,但我不确定 ASP.net 会话状态是如何工作的。任何帮助将不胜感激。
如果在登录期间将用户对象保存到会话状态,并且设置了 User.FirstName 和 User.LastName。如果其他网页从会话中检索用户对象并将 FirstName 设置为其他内容,是否会保留在其他网页上?或者,一旦用户对象被修改,您是否需要将其重新添加回会话?谢谢
【问题讨论】:
会话在服务器上持续存在,但通过客户端跟踪。我重复一遍 - 通过客户端。
在大多数情况下,使用 cookie 跟踪会话。因此,使用您的示例,当 User 对象保存到 Session 时:
Session["UserInfo"] = new User { FirstName = "Joe", LastName = "Bloggs" };
一个带有唯一标识符的 cookie 将被发送到客户端。除非过期,否则此 cookie 将传递给来自此客户端/浏览器的所有进一步 HTTP 请求。
如果另一个用户第一次出现(来自不同的机器),Session["UserInfo"] 将为空。
cookie 的替代方案是“cookieless-session” - 不是使用 cookie 来存储会话标识符 - 标识符被附加到 URL。
所以答案是否定的 - 其他网页(例如其他客户端/机器/浏览器)将无法访问此信息。
如果您希望通过网络服务器在不同客户端之间共享信息,请使用缓存。
但是考虑到问题的上下文(用户信息),将此信息存储在会话中是有效的,因为它仅与特定用户相关(不应共享)。
许多人使用的另一种方法不是在会话中粘贴用户信息,而是将其置于附加到表单身份验证票证的通用原则中。
由你决定选择哪条路。
【讨论】:
这应该可以帮助您了解 ASP.Net 中的会话
http://www.codeproject.com/KB/aspnet/ExploringSession.aspx
http://www.codeproject.com/Articles/32545/Exploring-Session-in-ASP-Net
【讨论】:
您对对象所做的任何更改都会保留。
【讨论】: