1

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

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

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

为什么会这样?

有人请解释一下它是如何Session_End工作的。

我到处搜索,但找不到解决方案。

4

2 回答 2

1

我认为您可以获得该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());
            }
        }
    }

希望这会有所帮助!

于 2013-04-10T16:17:08.037 回答
0

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

void Session_End(object sender, EventArgs e)
{
   int var=0;
   if (Session["value"] != null)
   {
      var = Convert.ToInt32(Session["value"]);
      UpdateToDatabase(var);
   }
}
于 2013-04-19T12:56:47.337 回答