Расширяет ли сеанс запрос ajax, выполняемый таймером? - PullRequest
0 голосов
/ 20 сентября 2018

В моем приложении Asp.Net MVC я хочу скрыть корзину и некоторые кнопки, если сессия истекла.

Вот что я нашел, чтобы сделать это: Как вызвать функцию по таймеруASP.NET MVC

window.setInterval(function() {
  // Send an AJAX request every 5s to poll for changes and update the UI
  // example with jquery:
  $.get('/foo', function(result) {
    // TODO: use the results returned from your controller action
    // to update the UI
  });
}, 5000);

Вопрос касается влияния этого типа вызовов ajax на сеанс. Будет ли такой вызов ajax продлевать сеанс или, поскольку это не действие пользователя, сеанс истекает в конце?

1 Ответ

0 голосов
/ 15 октября 2018

Вот решение:

Добавил этот класс в мое приложение:

   using System;
   using System.Web;
   using System.Web.Mvc;
   using System.Web.Security;

namespace Capron.MVC.Filters
{
   [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
   public class SessionExpireFilterAttribute : ActionFilterAttribute
   {
      public override void OnActionExecuting(ActionExecutingContext filterContext)
      {
        if (filterContext.ActionDescriptor.ControllerDescriptor.ControllerName.ToLower() == "home" 
            && (filterContext.ActionDescriptor.ActionName.ToLower() == "index" 
            || filterContext.ActionDescriptor.ActionName.ToLower() == "ındex")) {
            base.OnActionExecuting(filterContext);
            return;
        }
        HttpContext ctx = HttpContext.Current;
        if (ctx.Session != null)
        {
            if (ctx.Session.IsNewSession)
            {
                if (filterContext.HttpContext.Request.IsAjaxRequest())
                {
                    string sessionCookie = ctx.Request.Headers["Cookie"];
                    if (sessionCookie != null && sessionCookie.IndexOf("ASP.NET_SessionId") >= 0)
                    {
                        filterContext.HttpContext.Response.StatusCode = 401;
                        filterContext.HttpContext.Response.End();
                    }
                }
                else
                {
                    ctx.Response.Redirect("~/Home/Index");
                }
            }
        }
         base.OnActionExecuting(filterContext);
      }
   }
}

И добавил этот атрибут в мой контроллер:

[SessionExpireFilterAttribute]
public class HomeController : BaseController
{
 ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...