7

I'm using the session to hold a custom object UserSession and I access the session like this:

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

Then, in my code, I modify a property of TheSession like this

TheSession.Prop1 = some new value;

My question is this: when I change the value, does it change the value inside the session that's in HttpContext.Current.Session["UserSession"] or just the TheSession variable, in which case I'd need to reassign the object variable to the session.

Thanks.

Brian Webster
  • 30,033
  • 48
  • 152
  • 225
frenchie
  • 51,731
  • 109
  • 304
  • 510

4 Answers4

4

The standard session provider is a simple dictionary that stores objects in memory.

You're modifying the same object that you put in the session, so the modifications will persist.
(unless you're using an evil mutable struct)

Community
  • 1
  • 1
SLaks
  • 868,454
  • 176
  • 1,908
  • 1,964
4

Yes it is the same object. It is very easy to see in the following example:

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

The Write will display: Test

Kelsey
  • 47,246
  • 16
  • 124
  • 162
1

create a static class with static properties:

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

When u use it:

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

it will use the session variable to store information passed to this property.

Martin Ongtangco
  • 22,657
  • 16
  • 58
  • 84
0

It doesn't need to reassign the object. Because both of them are pointing to same instance in memory

Peyman
  • 3,068
  • 1
  • 18
  • 32