Сразу скажу, что я не думаю, что решение этой проблемы зависит от того, на чем реализована серверная часть(Ruby, Python, PHP, JSP, ASP.NET, etc.), поэтому я опускаю тут этот момент.
В общем допустим, что пользователь в данный момент залогинен и находится в своем профайле(profile.htm). Далее он решает разлогиниться и нажимает на соответствующую ссылку(logout.htm). logout.htm удаляет куки из браузера, объекты связанные с юзером на сервере и редиректит его на страницу login.htm. Но вот вопрос: как предотвратить переход пользователя обратно, на profile.htm, если он(или кто-то другой) нажмет кнопку «Go Back» в браузере?
Браузер кеширует страницу профайла и предыдущие тоже, что позволяет нажатием «Go Back» просмотреть их все по цепочке… Все ссылки на этих страницах будут, конечно же, уже не активны, но кешированные данные о пользователе(допустим: email, name etc.) можно увидеть.
Как предотвратить такое поведение системы?
Я имею ввиду стандартные способы, не хочется изобретать велосипед.
UPD: Короче говоря, какого-то законченного решения проблемы я так и не нашел.
Трюки с ajax, на мой взгляд, в принципе не могут тут применяться потому, что это больше похоже на хак, нежели на стандартную реализацию и это не будет работать при выключенном javascript. Так же, такое решение больше годится для порталов большей частью или полностью построенных на ajax (вроде Twitter).
Другое решение на javascript, с использованием history.forward(), работает не везде. Например, в последней версии Firefox(Firefox4) — это не работает. Также, при выключенном javascript…
С точки зрения реализации более правильный способ тот, что
предлагает VolCh: добавление http-заголовков, вроде Cache-Control:no-cache, no-store, must-revalidate; Pragma:no-cache; Expired:0. Ведь лучше просто не закидывать браузеру в кеш то, что после logout захочется оттуда удалить. Это логичный и простой способ достичь указанной мной цели. Хабр, кстати, тоже после логина возвращает заголовки с этими аттрибутами. Однако, этот подход так же работает не везде. Я протестировал на Firefox, Chrome, Opera и Safari. В первых двух случаях браузер ожидаемо не позволял переходить назад после logout, во вторых двух — позволял…
В общем, на данный момент я останавливаюсь на способе с http-заголовками.
PS: Кстати, очень полезной оказалась вот эта ссылка:
stackoverflow.com/questions/4194207/restrict-user-from-accessing-the-previous-page-after-signout