Как выйти из формы аутентификации после завершения сеанса

Мое приложение MVC использует FormsAuthentication для входа.

    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public ActionResult Login(FiNext.Models.User user)
    {
        try
        {
            using (HttpClient httpClient = new HttpClient())
            {
                var task = httpClient.PostAsJsonAsync<FiNext.Models.User>(String.Concat(ServiceUri.ApiUrl,"/Test/Validate"), user).Result;

                FormsAuthentication.SetAuthCookie(user.Name, false);
                SessionHelpers.UserId = user.Id;
                return RedirectToAction("Create");

            }
        }

И у него есть время сеанса из 1 минуты (в web.config), и как только тайм-аут сеанса вызван, я очищаю сеансы в событии session_end в Global.asax.

    protected void Session_End(object sender, EventArgs e)
    {
        Session.Clear();
        Session.Abandon();
    }

Теперь проблема, когда я выхожу, используя обычную кнопку выхода из системы на странице, страница выходит из системы.

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult LogOff()
    {
        try
        {
            FormsAuthentication.SignOut();

            return RedirectToAction("Home", "User");
        }
        catch (Exception ex)
        {                
            throw ex;
        }
    }

и теперь я нажимаю на любой URL этого приложения (скажем, " http://abcd.com/User/UserList"), оно перенаправляется на страницу входа, так как мы вышли из системы и перенаправили на домашнюю страницу. Это желаемый функционал и работает нормально.

Но проблема в том, что истекает время сеанса и запускается событие session_end. И теперь, когда я нажимаю на любой URL этого приложения (скажем, " http://abcd.com/User/UserList"), я могу получить данные (чего не должно быть).

Итак, как выйти из проверки подлинности с помощью форм при запуске session_end. Я попробовал это в сессии session_end в Global.asax:

    protected void Session_End(object sender, EventArgs e)
    {
        FormsAuthentication.SignOut();
        Session.Clear();
        Session.Abandon();
    }

но он дает "Ссылка на объект не установлена ​​на экземпляр объекта". исключение.

1 ответ

Может быть, я что-то упускаю, но это звучит как проблема авторизации, а не проблема сеанса.

Защищено ли ваше действие UserList каким-либо образом?

[Authorize]
public ActionResult UserList()
{
    return View();
}

http://msdn.microsoft.com/en-us/library/ff398049(v=vs.100).aspx

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