Asp.net - 对会话对象的更改是否仍然存在?

时间:2011-06-17 02:44:04

标签: c# asp.net

我正在使用会话来保存自定义对象UserSession,我这样访问会话:

UserSession TheSession = HttpContext.Current.Session["UserSession"] as UserSession;

然后,在我的代码中,我像这样修改了TheSession的属性

TheSession.Prop1 = some new value;

我的问题是:当我更改值时,它是否会更改HttpContext.Current.Session [“UserSession”]中的会话内的值或仅更改TheSession变量,在这种情况下我需要重新分配对象变量到会话。

感谢。

4 个答案:

答案 0 :(得分:4)

标准会话提供程序是一个将对象存储在内存中的简单字典。

您正在修改您在会话中放置的同一对象,因此修改将持续存在 (除非您使用evil mutable struct

答案 1 :(得分:4)

是的,它是同一个对象。在以下示例中很容易看到:

Session["YourObject"] = yourObject;
yourObject.SomeProperty = "Test";
var objectFromSession = (YourObjectType)(Session["YourObject"]);
Response.Write(objectFromSession.SomeProperty);

Write将显示:Test

答案 2 :(得分:1)

使用静态属性创建一个静态类:

public static class UserSession
{
    public static int UserID
    {
         get { return Convert.ToInt32(Session["userID"]); }
         set { Session["userID"] = value; }
    }
}

当你使用它时:

UserSession.UserID = 23;
Response.Write(UserSession.UserID);

它将使用会话变量来存储传递给此属性的信息。

答案 3 :(得分:0)

不需要重新分配对象。因为它们都指向内存中的同一个实例