I'm somewhat new to ASP / C# and I'm having an issue (probably simple) with sessions variables. My project has a Site.Master in which session variables are set under the Page_Load method like so:
protected void Page_Load(object sender, EventArgs e)
{
if ((Session)["UserID"]==null || (Session)["UserID"].ToString() == "")
{
(Session)["UserID"] = HttpContext.Current.User.Identity.Name.ToString();
SqlDataReader dr = Sprocs.GetPermissionGroups();
string groupList = "";
while (dr.Read())
{
if (groupList != "")
{
groupList = groupList + "|" + dr["WG_Group"].ToString();
}
else
{
groupList = dr["WG_Group"].ToString();
}
}
dr.Close();
if (groupList != "")
{
(Session)["UserGroups"] = groupList;
}
}
This does work. If I dump out the session variable 'UserGroups' to a label or something within this method, it does display the variable contents correctly.
So, my problem lies within another page (say default.aspx) when I try to access that same session variable. In the Page_Load method of the other page I attempt to do this:
protected void Page_Load(object sender, EventArgs e)
{
string GroupList = HttpContext.Current.Session["UserGroups"].ToString();
//some code with the variables here
}
This always fails with an "Object reference not set to an instance of an object." error. Am I trying to get the Session variable wrong? I've tried
string GroupList = Session["UserGroups"].ToString();
this also errors with the same error.
string GroupList = (string)(Session["UserGroups"]);
This always returns an empty string.
What am I doing wrong?
Thanks!
The syntax you are using in your Page_Load method I wouldn't have even expected to compile. Regardless, the issue is that you have not set the Session with that key, so it will return null. When you call ToString() on that null, you get the exception. In your second example:
string groupList = (string)(Session["UserGroups"])
That is doing a conversion of null to string, which results in a null string (thus not causing the exception).
You should be able to rewrite your Page_Load implementation like so:
string sessionUserId = Session["UserId"] as string;
if(string.IsNullOrEmpty(sessionUserId))
{
Session["UserId"] = HttpContext.Current.User.Identity.Name.ToString();
SqlDataReader dr = Sprocs.GetPermissionGroups();
string groupList = "";
while (dr.Read())
{
if (groupList != "")
{
groupList = groupList + "|" + dr["WG_Group"].ToString();
}
else
{
groupList = dr["WG_Group"].ToString();
}
}
dr.Close();
Session["UserGroups"] = groupList;
}
Then, when accessing the session variable later, do it like so:
string userGroup = Session["UserGroups"] as string;
This is a safe way to attempt the conversion of whatever bucket that is in session into a string. If the key doesnt exist, or the value is not a string, you will get null. Otherwise, you will get the string from that hash.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With