我有一个页面例如:www.samplepage.com/Index?id = 1001, 然后,我将此id存储在会话中,以便在整个解决方案中使用它。但是当会话超时我需要重定向到示例页面(www.samplepage.com/Index?id=1001)时,我正在使用OnActionExecuting ActionFilter方法。但现在我松开了id值,因为它存储在会话中。并且id会根据特定条件而变化,我无法对其进行硬编码。
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
HttpContext session = HttpContext.Current;
if (HttpContext.Current.Session["EmployerId"] == null)
{
filterContext.Result = new RedirectResult("~/Index");
return;
}
base.OnActionExecuting(filterContext);
}
如何存储id值并在ActionFilter中使用它?
答案 0 :(得分:0)
会话超时是滑动超时。每次服务器从客户端收到请求时,都会重置超时。会话过期的唯一方法是客户端是否与服务器绝对没有交互超过指定的超时。因此,在会话到期时无法重定向,因为这首先需要客户端发出重定向请求(请求 - 响应:服务器无法响应,除非它首先收到请求,并且重定向是一种响应。)
此外,当用户在会话过期后尝试发出新请求时,会话已经过期。因此,您存储的ID也已消失,因此重定向或不重定向,无法重置ID,因为它没有实际记录。
就个人而言,我建议只需实现一个长轮询AJAX,只要页面在用户的浏览器中打开,就能保持会话持续活动。您只需要在会话到期之前的某个时刻点击服务器,所以如果那是20分钟,请在19分钟后发送AJAX请求,然后再为其他20个好。您还可以设置超时更长的时间,也许到期不会成为一个问题。
除此之外,您需要确保您生成的链接包含id作为查询字符串的一部分,并且任何表单都将id包含为隐藏字段。这样,如果会话过期,请求中的ID仍然存在 somewhere ,您只需在会话中再次设置它。