我有一个客户,其网站对登录的用户使用身份验证。用户会话的超时时间为30分钟,然后将其注销。几个页面会定期轮询服务器中的数据。
我遇到的问题是,由于后台轮询,与服务器之间的连接一直保持不变,因此登录用户的会话永远不会过期。有没有一种方法可以防止与某些地址的连接重置会话计时器?
答案 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”设置为会话对象(定期请求除外)。然后,您可以检查用户的上次活动时间并结束会话。