Andrew
Andrew

Reputation: 466

Session State variables aren't working

I'm writing an ASP.NET C# web site that needs to access data from a database and show it to the user for viewing and editing. The specific data it accesses is based on the user who logs in, and I need for multiple users to be able to use the site simultaneously, viewing and editing different data as they do so. I stumbled upon the concept of Session States, and after a lot of reading and not as much understanding. I've come across a problem.

In my default page, I do this to create a Session variable:

Session.Add("UserData",userdata);

I have also tried this:

Session["UserData"] = userdata;

Then in a later page, I do this to try to call it:

object myobject = Session["UserData"];

This gives me an error, saying that Session["UserData"] is not set to an instance of an object. This is the method everyone seems to be using, is there something I'm missing?

My site is configured on IIS to have the Session State Mode set to "In Process", but most people seem to set this manually using their web.config file. However, when I try to do this in my web.config file I am always greeted with "unrecognized configuration section". My compiler doesn't know what this is:

<sessionstate mode="inproc"/>

EDIT, more detailed code:

MyClass userdata = new MyClass();
userdata.name = "myname";
userdata.number = 5;

Session["UserData"] = userdata;

later...

MyClass mydata = (MyClass)(Session["UserData"]);

This returns the error that Session["UserData"] is null.

Upvotes: 3

Views: 23448

Answers (5)

Michael G. Workman
Michael G. Workman

Reputation: 375

Session variables are good to manage multiple users on your website, but to initialize them you should use the Global.asax file in your web application. This file has two methods specifically for Session variables, Session_Start and Session_End. To initialize your Session variable you would use code liked the following in Global.asax:

void Session_Start(object sender, EventArgs e) 
{
    // initialize session variable        
    Session["MySessionVar"] = 1;
}

Also you may have to cast the value of your session variable if you are doing operations on it like +, for example if you have a session variable holding an integer value, you may have to do like the following:

Session["MySessionVar"] = ((int) Session["MySessionVar]) + 1;

Also, if you try to use your session variable outside of a method like Page_Load or other method, like trying to use it as a property of the System.Web.UI.Page class in your C# code behind file, that may not work, you can only use your session variables within a method.

Upvotes: 2

mfeingold
mfeingold

Reputation: 7154

Does it complain the your myobject is null or that Session is null? When you try to retrieve the value you are doing this from the method of what class?

Yet another question - by any chance are you trying to access it in a parallel thread?

Upvotes: 0

Crab Bucket
Crab Bucket

Reputation: 6277

The fact that you can't set the session mode in the web.config is a red flag to me of something weird and smelly going on. So ...

  1. Check that the session mode is under the system.web element of the web.config otherwise it won't be valid.

  2. Check that enableSessionState hasn't been set to false in either the web.config or the page directive

  3. Try to rule out IIS. If possible convert your website to a web app and run through visual studio so it starts with it's own built in web server. What happens then? Is the Session state back?

  4. It should n't make a difference but if you are not doing the test in Page_Load then just try it there - just in case you are doing these tests somewhere unusual.

Whatever the answer is to this when we know it will be headachingly obvious. I'm geninuely looking forward to finding out what it is. Good luck

Upvotes: 7

MethodMan
MethodMan

Reputation: 18843

Where you have Session.Add("UserData",userdata); you want to check the value you need to cast the object with (string) like this

   string userdata= (string)(Session["UserData"]); 

you could then run a check to see if(string.IsNullOrEmpty(userdata)) but not sure how you are initializing and assigning a a value to userdata

Upvotes: 0

Jacob G
Jacob G

Reputation: 3665

I would search for any calls to Session.Clear or Session.Abandon to see if your session is being purged in between those two actions.

You could also hook up to the Session_End event and see if that gets hit sometime in between the two calls.

Upvotes: 0

Related Questions