Как да анулирам сесията на браузъра

Как мога да обезсиля сесията на браузъра. Използвам JSP. В web.xml session-timeout е настроен на 180 секунди и искам само така. Но проблемът е в някакъв специален случай, защото сесията на браузъра на някои потребители трябва да бъде анулирана веднага след изпращане на формуляр.

Използвал съм session.invalidate(); за невалидност на сесията и също използвах

response.setHeader("Cache-Control", "no-cache");
response.setHeader("Pragma", "no-cache");
response.setDateHeader("Expires", 0);

Но въпреки това, когато щракна върху бутона за връщане, това ще ме отведе до същата потребителска сесия. Това зарежда ли се от кеша на браузъра?

Ето какво имам в моя JSP:

<head>
<script type="text/javascript">
function submitForm(){window.document.submitFrm.submit();}
</script>
</head>
<body onload="submitForm()">
<%String output = (String)(request.getAttribute("strOut"));
String hookUrl = (String)(request.getAttribute("hookUrl"));
System.out.println("hookUrl in cwsGroup.jsp : "+hookUrl);%>
<form method="post" action="<%=hookUrl%>" name="submitFrm" id="submitFrm">
<input type="hidden"  name="cxml-urlencoded" value='<%=output%>' />
</form>
<%
response.setHeader("Cache-Control","no-cache");
response.setHeader("Pragma","no-cache");
response.setDateHeader( "Expires", 0 );
session.removeValue("domineName");
session.invalidate();%>
</body>

Изпускам ли нещо?


person Warrior    schedule 22.03.2011    source източник
comment
Изглежда като кеш на браузъра. След като щракнете върху бутона Назад, опитайте да добавите произволно число към вашия URL като rand=234234 & refresh. Ако не пренасочва към страницата за вход (ако имате настройка за удостоверяване), тогава вашата сесия при валидиране не би се случила. Може при зареждане на формуляра да имате AJAX сърдечен ритъм, за да проверите дали все още сте в активна сесия, която може да победи кеша на браузъра.   -  person isobar    schedule 22.03.2011


Отговори (2)


Тези заглавки са непълни. Това ще работи само в Internet Explorer, но ще се провали в други. Пълният комплект е

response.setHeader("Cache-Control","no-cache,no-store,must-revalidate");
response.setHeader("Pragma","no-cache");
response.setDateHeader("Expires", 0);

Освен това трябва да ги зададете и в предишните JSP страници. Извикването на това вътре в JSP би деактивирало кеша само на текущата JSP страница. Трябва да го копирате върху всички JSP страници (потръпване). Или дори по-добре, използвайте Filter за това, което е нанесено на *.jsp. За пример вижте този отговор.

person BalusC    schedule 22.03.2011
comment
C Използвам горното решение в клас My LogoutAction, докато потребителите извършват излизане, тествах това в Mozill Firefox 17.0.1. Пиша всички горни заглавия и след това анулирам сесията. след извършване на операция за излизане страницата се препраща към страницата за влизане, след което натискам бутона за връщане назад на браузъра и той показва таблото за управление или последната страница, от която извършвам операцията за излизане. някаква помощ или трябва да публикувам друг въпрос за нея? - person Mihir; 01.01.2013
comment
@Mihir: Тези заглавки трябва да бъдат зададени на отговорите, за които искате да изключите кеша на браузъра. Задаването им само на отговора на действието за излизане очевидно няма да ги настрои на всички други отговори, които са били изпратени преди това. - person BalusC; 01.01.2013
comment
така че какво да направя, за да постигна целта си? трябва ли да пусна още един въпрос за вас? - person Mihir; 01.01.2013

Както казахте, сесията при щракване върху бутона за връщане става невалидна. ТАКА, че моля, направете сесията невалидна при събитие с бутон Назад.

моля, добавете "<" ">" за първия и последния ред в кодовия фрагмент

<script type="text/javascript">

      bajb_backdetect.OnBack = function()
      {

        alert('You clicked it!');

      }

<script>
person developer    schedule 22.03.2011