为什么我不能读取会话变量

时间:2012-10-27 16:57:29

标签: c# asp.net session

我有一个c#.net网络应用程序。我创建会话变量,但是当我离开页面后我尝试读取它们时,我不能。

第1页创建

Session["UserName"] = "WhatEver";

然后我做

Response.Redirect("~/whatever.aspx"); 

并尝试阅读以读取新页面的Page_Load方法中的会话变量

string userName = Session["UserName"].ToString();

我收到Object reference not set to an instance of an object.

为什么我收到此错误,我该怎么做才能解决问题?

3 个答案:

答案 0 :(得分:5)

这可能有所帮助:

Response.Redirect("~/whatever.aspx",false);

来自this article

  

这不会中止线程,从而节省会话令牌。实际上,此重载由RedirectFromLoginPage内部使用。

答案 1 :(得分:0)

sessionState文件中可能会config被关闭

<sessionState mode="Off/> 

更改为InProc [取决于]

<sessionState mode="InProc" timeout ="60" />

答案 2 :(得分:0)

我有完全相同的问题,我设法克服了这个问题,但坦率地说我不理解100%的解决方案,反正我做的是从我的项目创建一个“Global.asax”文件“添加新项”菜单。只需将以下代码复制粘贴到全局文件中即可。该文件中的代码如下:

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.Security;

using System.Text;
using System.Data;
using System.Data.SqlClient;

namespace ENTER_YOUR_NAMESPACE
{
    public class Global : System.Web.HttpApplication
    {
        void Application_Start(object sender, EventArgs e)
        {

        }

        void Application_End(object sender, EventArgs e)
        {
            /* Code that runs on application shutdown */
            Session_End(sender, e);
        }

        void Application_Error(object sender, EventArgs e)
        {

        }

        void Session_Start(object sender, EventArgs e)
        {

        }//end void Session_Start

        void Session_End(object sender, EventArgs e)
        {

        }//end void Session_End

    }//end class Global
}//end namespace