【问题标题】:saving and retrieving values from session state in asp.net在 asp.net 中保存和检索会话状态中的值
【发布时间】:2010-12-20 11:02:40
【问题描述】:

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

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

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    会话在服务器上持续存在,但通过客户端跟踪。我重复一遍 - 通过客户端。

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

    Session["UserInfo"] = new User { FirstName = "Joe", LastName = "Bloggs" };
    

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

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

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

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

    如果您希望通过网络服务器在不同客户端之间共享信息,请使用缓存

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

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

    由你决定选择哪条路。

    【讨论】:

      【解决方案2】:

      这应该可以帮助您了解 ASP.Net 中的会话

      http://www.codeproject.com/KB/aspnet/ExploringSession.aspx http://www.codeproject.com/Articles/32545/Exploring-Session-in-ASP-Net

      【讨论】:

        【解决方案3】:

        您对对象所做的任何更改都会保留。

        【讨论】:

        • 好的,所以如果在我的页面上我通过会话检索我的用户对象并设置我的页面级用户变量。如果我通过页面级变量更新用户对象,它会自动更新会话用户对象吗?
        • 是的。除非您的应用程序在服务器场上运行,否则您的会话数据只是保存在服务器内存 (inproc) 中的一个对象。 ASP.NET 通过 id 确定请求来自哪个客户端,然后使用该 ID 来确保正确的会话字典是处理请求的代码,但它不会更改字典。您对它或它指向的任何对象所做的任何更改都将持续存在。
        猜你喜欢
        • 2012-02-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-10
        • 1970-01-01
        • 2012-12-15
        • 1970-01-01
        • 2012-03-02
        相关资源
        最近更新 更多