Проблемы с очисткой контекста сеанса сразу после выхода из MVC3 - PullRequest
0 голосов
/ 13 сентября 2011

У меня проблема с входом и выходом пользователя из приложения MVC3.Вот пример моих действий по выходу из системы в моем пользовательском контроллере:

public ActionResult Logout()
{
    FormsService.SignOut();
    Session.Clear();
    return RedirectToAction("index", "home");
}

Когда пользователь нажимает «Выйти», вызывается это действие, он очищает информацию о сеансе, а затем пользователь перенаправляется на страницу индекса.

На моей странице указателя я вызываю помощника C # для отображения такого сообщения:

@section links { @Html.HdrLinks("Home", "", Context.User) }

Вот часть кода помощника:

System.Security.Principal.IPrincipal user

if (user.Identity.IsAuthenticated)
{
   return new MvcHtmlString("Welcome " + user.Identity.Name);
}

Моя проблема в том, чтокогда страница индекса отображается НЕМЕДЛЕННО ПОСЛЕ выхода из системы, она по-прежнему показывает ту же информацию о сеансе.Другими словами, он по-прежнему показывает сообщение «Добро пожаловать, Джон».Только ПОСЛЕ ТОГО, КАК я обновляю страницу в браузере, он правильно видит, что там нет имени пользователя в сеансе.

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

ОБНОВЛЕНИЕ:

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

FormsService.SignOut();
Session.Clear();
Session.Abandon();
return new RedirectToRouteResult(new RouteValueDictionary(new { controller = "Home", action = "Index" }));

Ответы [ 2 ]

0 голосов
/ 15 февраля 2012

Вот ссылка на другую публикацию, которая описывает две вещи , которые вам нужно сделать более подробно:

  1. Вам необходимо очиститьSession, Auth Cookie и Session Cookie и вернуть куки в ответе.

  2. Вам необходимо аннулировать кэш на клиенте, чтобы пользователь не мог посещать кэшированные страницы, нажимая на браузер.кнопка возврата.

Подробнее см. ссылку ....

0 голосов
/ 13 сентября 2011

Это может быть проблема с кешем. Вы проверяли, что когда ваш код запрашивает у браузера переадресацию, браузер действительно отправляет новый запрос на страницу индекса? Просто установите точку останова на действие index и посмотрите на свойство Session.

...