Как выйти из формы аутентификации после завершения сеанса
Мое приложение 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