Перенаправление на страницу входа автоматически без выполнения действий в контроллере ASP.NET MVC по окончании сеанса - PullRequest
0 голосов
/ 27 сентября 2018

Я знаю, что это обычный вопрос, но я действительно устал от поиска полного решения без успеха.Я сделал фильтр атрибутов, но он работает, только если пользователь взаимодействует с приложением, и я не хочу этого, я хочу, чтобы по окончании сеанса автоматически браузер загружал страницу входа.Может быть, кто-то может показать, какой код я должен использовать в javasccript или html .... и конфигурацию, которую я должен использовать в web.config, если это необходимо.Заранее спасибо.

Это мой фактический атрибут:

[AttributeUsage(AttributeTargets.Method)]
    public class SessionExpireCustom : FilterAttribute, IActionFilter
    {
        public void OnActionExecuting(ActionExecutingContext filterContext)
        {
            if (HttpContext.Current.Session[HttpContext.Current.Session.SessionID + "_authstatus"] == null)
            {
                string redirectTo = "~/Account/Login";
                if (!string.IsNullOrEmpty(HttpContext.Current.Request.RawUrl))
                {
                    redirectTo = string.Format("~/Account/Login?ReturnUrl={0}", HttpUtility.UrlEncode(HttpContext.Current.Request.RawUrl));
                    filterContext.Result = new RedirectResult(redirectTo);
                    return;
                }

                filterContext.Result = new RedirectResult("~/Account/Login");
                return;
            }
        }

        public void OnActionExecuted(ActionExecutedContext filterContext)
        {
            return;
        }
    }

И в моем web.config:

<system.web>
    <sessionState mode="InProc" cookieless="false" timeout="20" />
    <compilation debug="true" targetFramework="4.6.1" />
    <httpRuntime targetFramework="4.6.1" maxRequestLength="102400"/>
    <!--KiloBytes--> 
    <httpModules>
      <add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web" />
    </httpModules>    
  </system.web>

1 Ответ

0 голосов
/ 27 сентября 2018

Вот мое решение.Вы можете обратиться.Это делает счет времени после последнего действия пользователя, а не первого посещения сайта.

В _Layout добавьте это:

<script>
    //session end 
    var sessionTimeoutWarning = @Session.Timeout- 1; //when session end 1 minute before this code makes redirect

    var sTimeout = parseInt(sessionTimeoutWarning) * 60 * 1000;
    setTimeout('SessionEnd()', sTimeout);

    function SessionEnd() {
        window.location = "/Account/LogOff"; //Redirect to LogOff, and then redirect to Login 
    }
</script>

- Вам необходимо очистить Session в методе LogOff.

public ActionResult LogOff()
{    
    Session.Clear();
    Session.Abandon();
    FormsAuthentication.SignOut(); 
    return RedirectToAction("Login", "Account");
} 

Надеюсь на помощь, дружище :))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...