I have an MVC3 application on .net4 that its session working in the dev Environment, but not in the production.
In the production I logged the sessionID and the it is the same in the moment I Set and Get from the session.
When I try to get the session I am getting Null Exception
.
This is how I access the session:
public static class HandlersHttpStorage
{
public static string TestSession
{
get
{
return HttpContext.Current.Session["time"];//This is null
}
set
{
HttpContext.Current.Session.Add("time", value);//DateTime.Now.ToString()
}
}
}
What's makes me worried is that the behavior in the production is different than the development, even though the web.config is the same.
For me, I found that
HttpContext.Current
was null, so I created it:And I passed that into my function that was in my other class, like this:
I had actually wanted my function to be a real extension method off of
Session
like the one below, but what I found wasthis HttpSessionStateBase session
was null, it would give theNullReferenceException
when I tried to add anything toSession
using it. So this:That Microsoft had here: https://code.msdn.microsoft.com/How-to-create-and-access-447ada98 became this, instead:
And I was able to retrieve my data like this:
And, of course, since
HttpContext.Current
andSession
now exists, I was able to even simplify that to be:If this had been object, you would put the object's type in place of
<string>
in theSetDataToSession()
function:And to retrieve it:
or simply:
Another possible cause/solution is that IE doesn't save cookies if the domain name has an underscore (because strictly speaking domain names can't have underscores, so you'll probably only encounter this in development), e.g.
http://my_dev_server/DoesntWork
. Chrome or Firefox should work in this scenario, and if you change the domain name you're using to not have an underscore problem solved.Ref:
Solution 1:
Link: HttpContext.Current.Session is null when routing requests
Got it. Quite stupid, actually. It worked after I removed & added the SessionStateModule like so:
Simply adding it won't work since "Session" should have already been defined in the
machine.config
.Now, I wonder if that is the usual thing to do. It surely doesn't seem so since it seems so crude...
Solution 2:
Link: HttpContext.Current.Session null item
sessionKey may be changing, you probably only need to do:
Or the session may be expiring, check the timeout:
http://msdn.microsoft.com/en-us/library/h6bb9cz9(VS.71).aspx
Or you may be setting the session value from somewhere else, normally i control access to Session/Context object through one property