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

时间:2013-04-01 13:36:48

标签: c# asp.net session global-asax

当用户登录网站时,我创建了5个会话变量,其中包含一些与用户相关的值(如useridroleid等)。根据存储在会话变量中的一个值,我必须更新数据库中的记录。为此,我在Global.asax的Session_End()事件中编写以下代码

if (Session["UserHistoryID"] != null)
        SessionUtility.UpdateDatabase(Convert.ToInt32(Session["UserHistoryID"]));

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

为什么会这样?

有人请解释Session_End如何正常工作。

我到处搜索但找不到解决办法。

2 个答案:

答案 0 :(得分:1)

我认为您可以获得Session值的最早时间在Application_AcquireRequestState下,如Sessions and Global.asax所述,所以您可以在Global.asax <中写下这样的内容/ p>

void Application_AcquireRequestState(object sender, EventArgs e)
    {
        if (System.Web.HttpContext.Current.Session != null)
        {
            if (Session["language"] != null)
            {
                Response.Write(Session["language"].ToString());
            }
        }
    }
希望这会有所帮助!!

答案 1 :(得分:0)

如果我为Session_End事件中要访问的每个会话值声明一个变量,并将会话的值存储在此变量中,并使用我的功能中声明的变量,它正常工作

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