session在asp.net中返回null对象

时间:2014-07-25 11:47:51

标签: c# asp.net session

我正在开发asp.net web应用程序,其中我使用Session来存储用户相关的数据。虽然我在会话对象中存储数据时我试图检索它但是给出了错误:

Object reference not set to an instance of an object.

设置会话变量

aspx页面(myfile.aspx.cs)背后的代码中的某处

HttpContext.Current.Session["ProjectID"] = Request.QueryString["Pid"].ToString();

检索会话变量

普通商业逻辑C#类(Someclass.cs)

sProjectID = HttpContext.Current.Session["ProjectID"].ToString();

它给我上面的错误。这对我来说很奇怪。任何人都能解释一下吗?

修改

通过通用处理程序(.ashx)页面调用类传递

4 个答案:

答案 0 :(得分:2)

如果它确实是您展示的代码行,那么会产生异常,这意味着您的正常业务逻辑"正在非HttpRequest处理线程中运行,其中诸如Context和Session之类的东西不可用。检查HttpContext.CurrentHttpContext.Current.Session是否为空。

<强>更新

看到您的编辑后 - 要访问Session,您的处理程序必须在其类声明中包含IRequiresSessionState。请参阅:HttpContext.Current.Session is null in Ashx file

答案 1 :(得分:0)

您可以在设置会话值的调试模式行中到达吗?如果您可以尝试点击线路并通过键&#34; ProjectID&#34;来检查会话中的值。

答案 2 :(得分:0)

尝试以这种方式设置Cookie:

HttpCookie cookie = HttpContext.Current.Request.QueryString["Pid"].ToString();
cookie.Expires = DateTime.Now.AddDays(7); // Set the expiration duration
HttpContext.Current.Response.Cookies.Set(cookie); // Set it to the response

尝试在下一个请求中以这种方式获取cookie:

string value = HttpContext.Current.Request.Cookies["Pid"] != null ? this.Page.Request.Cookies["Pid"].ToString() : null; // load it from request

老实说,您根本不应该尝试在业务逻辑中接收cookie,因为它与您的网站无关。相反,您应该在UI(web)中加载cookie,并将值作为参数传递给业务逻辑中Someclass.cs的任何函数或属性。

看看N层模型及其原因。

答案 3 :(得分:0)

在调试模式下,您无法在会话中找到任何值。将其分配给类似字符串的引用变量,并查找它是否返回值。

并且为了一个好的做法,在分配给任何对象之前检查会话变量是否为空。