как перенаправить на новую страницу после вызова jquery ajax в MVC, если время ожидания сеанса? - PullRequest
7 голосов
/ 24 февраля 2011

1 - У меня есть Ajax-ссылка, которая вызывает действие, и это действие возвращает представление, это представление, открытое в определенном Div (рассматривайте его как меню, которое обновляет div с соответствующим представлением) 2 - если время ожидания сеанса вернуло мое имя входа в систему

, поэтому, если я нажму на ссылку и сессия истечет, время входа в систему откроется в div, а не на всей странице

что мне делать, если тайм-аут сеанса возвращает вид входа в систему на новой странице в моем div?

Ответы [ 2 ]

11 голосов
/ 13 апреля 2011

Эффективным способом обработки истечения сеанса является создание настраиваемого атрибута авторизации и возврат ответа HTTP 403 , если сеанс истек и имел дело с запросом ajax.

Комусоздайте атрибут авторизации с поддержкой Ajax, который вы можете наследовать от AuthorizeAttribute , и переопределите событие HandleUnauthorizedRequest проверкой типа запроса, например. IsAjaxRequest ()

public class AjaxAuthorizeAttribute : AuthorizeAttribute
{
    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    {
        if (filterContext.HttpContext.Request.IsAjaxRequest())
        {
            // Fire back an unauthorized response
            filterContext.HttpContext.Response.StatusCode = 403;
        }
        else
            base.HandleUnauthorizedRequest(filterContext);
    }
}

Затем просто украсьте свои контроллеры или действия атрибутом AjaxAuthorize, как вы это обычно делаете с Authorize

[AjaxAuthorize(Roles = "1,2,3,4,5")]
public class HomeController 
{

Тогда, если выИспользуя jQuery, вы можете обработать ответ 403, создав глобальный обработчик ошибок ajax.

    $.ajaxSetup({
        error: function (x, e) {
            if (x.status == 403) {
                alert("Sorry, your session has expired. Please login again to continue");
                window.location = "/login";
            }
        }
    });
0 голосов
/ 22 июня 2016

Вы можете перенаправить пользователя на страницу входа в событие Session_Start в Global

protected void Session_Start()
    {
        GeneRateKey();
        if (Session["Username"] != null)
        {
            //Redirect to Welcome Page if Session is not null  
            HttpContext.Current.Response.Redirect("~/WelcomeScreen", false);

        }
        else
        {
            //Redirect to Login Page if Session is null & Expires                   
            new RedirectToRouteResult(new RouteValueDictionary { { "action", "Index" }, { "controller", "Login" } });
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...