Переадресация на страницу входа при нажатии кнопки "Назад" после выхода

Я использую MVC 3 для своего проекта, и моя проблема заключается в следующем: я хотел бы, чтобы пользователь перенаправил на страницу входа при нажатии кнопки "Назад" после выхода из системы. Мне известно, что нажатие кнопки "Назад" даст пользователю копию предыдущей страницы, хранящейся в кэше браузера. Так что я сделал, чтобы добавить атрибуты

[Authorize]
[OutputCache(NoStore = true, Duration = 0)]

для каждого actionresult или класса Controller, который должен пройти аутентификацию, прежде чем будет отображено предполагаемое представление. Сначала проблема была решена, однако возникли сложности, когда одна страница (страница результатов поиска) требует кэширования данных сетки в клиентском браузере, поскольку они "слишком велики" для извлечения каждый раз. Кроме того, у меня уже есть ссылки на указанную страницу, поэтому запрет на использование кеша приведет к созданию пустой сетки.

Есть ли способ, когда пользователь выходит из системы и пытается перейти на "кэшированную страницу" с помощью кнопки "Назад", сначала направляется на страницу входа?

Спасибо!

3 ответа

Есть ли способ, когда пользователь выходит из системы и пытается перейти на "кэшированную страницу" с помощью кнопки "Назад", сначала направляется на страницу входа?

Нет, если вы не отключите кеш браузера. Вы не можете управлять кнопкой "Назад" в браузере.

Я бы создал helper/BaseController.cs, который заставит пользователя перейти на страницу входа, если он не вошел в систему.

using System.Text;
using System.Web.Mvc;
using System.Collections.Generic;
namespace Helper
{
public class BaseController : Controller
{
    protected override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        // If session exists
        if (filterContext.HttpContext.Session != null)
        {
            if (this.Session["LoginName"] == null)
            {
                filterContext.Result = RedirectToAction("Index", "Login");
                return;
            }
        }
        //otherwise continue with action
        base.OnActionExecuting(filterContext);
    }
}
}   

Затем добавьте его в список всех ваших контроллеров, т.е.

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using ShieldUser.Models;
using PagedList;
using Helper;

namespace ShieldUser.Controllers
{
    public class UserController : BaseController
    { 

Вы можете добавить это в свой файл javascript

Другие вопросы по тегам