会话变量值在全局中并不总是可用.asax Session_end

本文关键字:asax Session end 变量值 全局 会话 | 更新日期: 2023-09-27 18:06:44

当用户登录到网站时,我创建了5个会话变量,其中包含一些与用户相关的值(如userid, roleid等)。根据存储在会话变量中的一个值,我必须更新数据库中的一条记录。为此,我在Global.asax

Session_End()事件中编写了以下代码
if (Session["UserHistoryID"] != null)
        SessionUtility.UpdateDatabase(Convert.ToInt32(Session["UserHistoryID"]));

这里的问题是,当会话超时并且Session_End触发Session变量Session["UserHistoryID"]NULL时,上述条件失败并且数据库中的记录未更新。当我在本地系统中测试时,它工作正常但当我在生产服务器中测试时,一些记录没有得到更新

为什么会发生这种情况?

谁来解释一下Session_End到底是怎么工作的

我已经到处找过了,但是找不到解决这个问题的方法。

会话变量值在全局中并不总是可用.asax Session_end

我认为您最早可以获得Session值的时间是在上文essiessions和Global中提到的Application_AcquireRequestState下。所以你可以在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事件中访问的每个会话值声明一个变量,并将会话值存储在该变量中,并在my功能中使用声明的变量,它将正常工作

void Session_End(object sender, EventArgs e)
{
   int var=0;
   if (Session["value"] != null)
   {
      var = Convert.ToInt32(Session["value"]);
      UpdateToDatabase(var);
   }
}