繁体   English   中英

会话变量值并非始终在Global.asax Session_end中可用

[英]Session variable value not always available in Global.asax Session_end

当用户登录网站时,我正在创建5个具有一些与用户相关的值(例如useridroleid等)的会话变量。 基于存储在会话变量中的值之一,我必须更新数据库中的记录。 为此,我正在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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM