2009-12-23 2 views
1

У меня есть приложение MVC, и я должен выйти из системы. Для выхода из приложения я создал ссылку на тэ главной страницеВыход из MVC

[ <a id="A2" name="lnkLogout" href="http://localhost:1234/Home/LogOut" >Logout</a> ] 

и создал действие LoutOut на странице контроллера

public ActionResult LogOut() 
     { 
      Session.Clear(); 
      Session.Abandon(); 
      Redirect("http://AnotherApplicaton/Home/LogOut"); 
     } 

Теперь, когда я нажимаю на выходе из системы связать его редирект выхода из системы действие и в действии LogOut удаляет весь сеанс, но когда я нажимаю кнопку «Назад» браузера, он возвращается к предыдущей странице, и сеансы все еще живы. У кого-нибудь есть решение этой проблемы.

ответ

2

Сессии: не живое; они просто кэшируются.

Вы можете попытаться обновить свою страницу (ctrl + f5) и проверить это.

6

Страницы, которые вы посещаете в своем браузере, кэшируются в зависимости от ваших настроек кеширования в браузере. Вам необходимо предотвратить кэширование в ASP.net MVC, чтобы они не кэшировались браузером. После этого попробуйте очистить кеш браузера и повторите попытку загрузки страницы. Выйдите из системы и попробуйте кнопку «Назад». Вы должны получить сообщение о том, что страница больше не существует или что-то еще.

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

this.Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1)) 
this.Response.Cache.SetCacheability(HttpCacheability.NoCache) 
this.Response.Cache.SetNoStore() 
+0

Действительно ли это действительно хорошая идея? Должен ли я устанавливать их явно на каждом представлении? Почему это не стандартная настройка для приложения MVC? ..... Это звучит как разумное предложение, однако по некоторым причинам это кажется странным, за исключением нескольких редких случаев. Любые предложения/комментарии? – VoodooChild

16

, если вы используете проверки подлинности форм, то это то, что вы ищете ...

public ActionResult LogOut() 
     { 
      Session.Clear(); 
      FormsAuthentication.SignOut(); 
      Redirect("http://AnotherApplicaton/Home/LogOut"); 
     } 

HTH

1

Привет получил решение. Фактически я использовал toke для входа в мой модуль, а время ожидания токена составляло 5 секунд. Если я выхожу из системы и нажимаю кнопку «Назад» браузера до 5 секунд, то событие session_Start() glowal.ascx.cs вызывается снова и снова читает токен и снова создает сеанс. И если я нажимаю кнопку «Назад» после 5 секунд, то сеанс не создается. Чтобы решить эту проблему, я не разрешаю пользователю переходить через браузер. Для этого я использовал следующий код

<script type="text/javascript"> 
history.go(1); 
</script> 
Смежные вопросы