[英]Session variable value not always available in Global.asax Session_end
当用户登录网站时,我正在创建5个具有一些与用户相关的值(例如userid
, roleid
等)的会话变量。 基于存储在会话变量中的值之一,我必须更新数据库中的记录。 为此,我正在Global.asax的Session_End()
事件中编写以下代码
if (Session["UserHistoryID"] != null)
SessionUtility.UpdateDatabase(Convert.ToInt32(Session["UserHistoryID"]));
这里的问题是,当Session超时并且Session_End
触发Session
变量Session["UserHistoryID"]
有时为NULL
且上述条件失败并且数据库中的记录未更新时。 在本地系统中对此进行测试时,它可以正常工作,但是在生产服务器中对其进行测试时,某些记录未得到更新
为什么会这样呢?
请有人解释一下Session_End
工作原理。
我到处搜索,但找不到解决方案。
我认为,您可以最早获得Session
值的时间是在Application_AcquireRequestState
下,如此处Sessions和Global.asax所述,因此您可以在Global.asax
编写类似的内容
void Application_AcquireRequestState(object sender, EventArgs e)
{
if (System.Web.HttpContext.Current.Session != null)
{
if (Session["language"] != null)
{
Response.Write(Session["language"].ToString());
}
}
}
希望这会有所帮助!
如果我为要在Session_End事件中访问的每个会话值声明一个变量,并将该会话的值存储在此变量中,并在我的功能中使用声明的变量,那么它将正常工作
void Session_End(object sender, EventArgs e)
{
int var=0;
if (Session["value"] != null)
{
var = Convert.ToInt32(Session["value"]);
UpdateToDatabase(var);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.