如何防止会话存活

时间:2018-10-11 23:18:09

标签: c# asp.net asp.net-mvc

我有一个客户,其网站对登录的用户使用身份验证。用户会话的超时时间为30分钟,然后将其注销。几个页面会定期轮询服务器中的数据。

我遇到的问题是,由于后台轮询,与服务器之间的连接一直保持不变,因此登录用户的会话永远不会过期。有没有一种方法可以防止与某些地址的连接重置会话计时器?

1 个答案:

答案 0 :(得分:1)

一旦收到服务器的请求,会话将被更新,并且会话将永远不会像您所说的那样过期。您可以采取以下解决方法。将代码复制到Global.asax。

void Application_AcquireRequestState(object sender, EventArgs e)
{
    if (HttpContext.Current.Session != null)
    {
        DateTime? userLastActive = (DateTime?)HttpContext.Current.Session["UserLastActive"];
        if (userLastActive.HasValue && DateTime.Now.Subtract(userLastActive.Value).Minutes > 15)
        {
            Session.Abandon();
            return;
        }

        // Check if the request for background tasks
        var controller = HttpContext.Current.Request.RequestContext.RouteData.Values["controller"].ToString();
        var action = HttpContext.Current.Request.RequestContext.RouteData.Values["action"].ToString();
        if (controller == "BackGroundTaskController" &&
            action == "BackGroundTaskAction")
        {
            // ignore
            return;
        }

        HttpContext.Current.Session["UserLastActive"] = DateTime.Now;
    }
}

根据每个请求,将执行以下代码。您可以将变量“ UserLastActive”设置为会话对象(定期请求除外)。然后,您可以检查用户的上次活动时间并结束会话。