我正在编写一个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”]为空的错误。
答案 0 :(得分:6)
你无法在web.config中设置会话模式这一事实对我来说是一个红旗,一些奇怪而又臭的东西。所以...
检查会话模式是否在web.config的system.web元素下,否则无效。
检查web.config或页面指令中的enableSessionState是否设置为false
尝试排除IIS。如果可能的话,将您的网站转换为Web应用程序并通过visual studio运行,以便从它自己的内置Web服务器开始。那么会发生什么?会话状态是否恢复?
它不应该有所作为,但如果您没有在Page_Load中进行测试,那么只需在那里尝试 - 以防万一你在某些地方进行这些测试是不寻常的。
当我们知道它将是非常明显的时候,无论答案是什么。我很期待找到它是什么。祝你好运
答案 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.Clear
或Session.Abandon
的任何来电,看看您的会话是否在这两个行动之间被清除。
您还可以连接到Session_End
事件,看看是否在两次调用之间的某个时间点击了该事件。
答案 4 :(得分:0)
你在哪里
Session.Add("UserData",userdata);
你想检查你需要使用(字符串)像这样
string userdata= (string)(Session["UserData"]);
然后,您可以运行检查以查看
if(string.IsNullOrEmpty(userdata))
但不确定如何初始化和为userdata分配值
答案 5 :(得分:0)
是否抱怨您的myobject
为空或Session
为空?当你尝试从什么类的方法中检索你正在执行此操作的值时?
还有一个问题 - 你是否试图在并行线程中访问它?