会话状态变量不起作用

时间:2011-12-21 20:37:19

标签: c# asp.net session-state

我正在编写一个ASP.NET C#网站,需要从数据库访问数据并将其显示给用户进行查看和编辑。它访问的特定数据基于登录用户,我需要多个用户能够同时使用该站点,查看和编辑不同的数据。我偶然发现了会话状态的概念,经过大量的阅读而没有那么多的理解。我遇到了一个问题。

在我的默认页面中,我这样做是为了创建一个Session变量:

Session.Add("UserData",userdata);

我也试过这个:

Session["UserData"] = userdata;

然后在后面的页面中,我这样做试图调用它:

object myobject = Session["UserData"];

这给了我一个错误,说Session["UserData"]没有设置为对象的实例。这是每个人似乎都在使用的方法,有什么我想念的吗?

我的网站在IIS上配置为将会话状态模式设置为“正在处理”,但大多数人似乎使用他们的web.config文件手动设置。但是,当我尝试在我的web.config文件中执行此操作时,我总是会遇到“无法识别的配置部分”。我的编译器不知道这是什么:

<sessionstate mode="inproc"/>

编辑,更详细的代码:

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

Session["UserData"] = userdata;

...后

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

这将返回Session [“UserData”]为空的错误。

6 个答案:

答案 0 :(得分:6)

你无法在web.config中设置会话模式这一事实对我来说是一个红旗,一些奇怪而又臭的东西。所以...

  1. 检查会话模式是否在web.config的system.web元素下,否则无效。

  2. 检查web.config或页面指令中的enableSessionState是否设置为false

  3. 尝试排除IIS。如果可能的话,将您的网站转换为Web应用程序并通过visual studio运行,以便从它自己的内置Web服务器开始。那么会发生什么?会话状态是否恢复?

  4. 它不应该有所作为,但如果您没有在Page_Load中进行测试,那么只需在那里尝试 - 以防万一你在某些地方进行这些测试是不寻常的。

  5. 当我们知道它将是非常明显的时候,无论答案是什么。我很期待找到它是什么。祝你好运

答案 1 :(得分:1)

会话变量可以很好地管理您网站上的多个用户,但要初始化它们,您应该在Web应用程序中使用Global.asax文件。该文件有两种专门用于Session变量的方法,Session_Start和Session_End。要初始化Session变量,您将使用Global.asax中的以下代码:

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

如果您对会话变量执行操作,也可能必须转换会话变量的值,例如,如果您有一个包含整数值的会话变量,则可能需要执行以下操作:

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

此外,如果您尝试在诸如Page_Load或其他方法之类的方法之外使用会话变量,例如尝试将其用作C#代码隐藏文件中的System.Web.UI.Page类的属性,那么可能不起作用,你只能在方法中使用你的会话变量。

答案 2 :(得分:0)

var sessionData = Session["data"];

答案 3 :(得分:0)

我会搜索对Session.ClearSession.Abandon的任何来电,看看您的会话是否在这两个行动之间被清除。

您还可以连接到Session_End事件,看看是否在两次调用之间的某个时间点击了该事件。

答案 4 :(得分:0)

你在哪里     Session.Add("UserData",userdata); 你想检查你需要使用(字符串)像这样

来转换对象所需的值
   string userdata= (string)(Session["UserData"]); 
然后,您可以运行检查以查看        if(string.IsNullOrEmpty(userdata)) 但不确定如何初始化和为userdata分配值

答案 5 :(得分:0)

是否抱怨您的myobject为空或Session为空?当你尝试从什么类的方法中检索你正在执行此操作的值时?

还有一个问题 - 你是否试图在并行线程中访问它?