2013-04-29 3 views
4

Мне нужно закончить сеанс автоматически, когда пользователь неактивен в течение определенного времени, говорят в течение 10 минут. У нас есть метод вКак завершить сеансы автоматически, если пользователь закрывает браузер

HttpSession session=request.getSession(); 
session.setAttribute("User", au); 
session.setAttribute("name", firstname); 
response.sendRedirect("doLogin.jsp"); 
session.setMaxInterval(); 

но это закончит сеанс, даже если пользователь активен в течение 10 минут. Как я могу завершить сеанс, когда пользователь закрывает браузер?

+0

Пользователь активен, но сессия заканчивается в любом случае? Похож на ошибку. Какой сервер вы используете? –

+0

Сессия не может закончиться, когда браузер закрыт. Должен быть запрос triggerd, который был отправлен при закрытии браузера. –

+0

@PeterRader, пожалуйста, скажите мне, как это сделать – 2013-04-29 06:21:44

ответ

13

Избегайте использования этого кода вручную.

просто в web.xml//this will applied for whole application

<session-config> 
<session-timeout>10</session-timeout> 
</session-config> 

Обнаружение браузера близкое событие и вызвать invalidate метод

if(session!=null) { 
session.invalidate(); 
} 
+0

Я знаю это, но мой вопрос заключается в том, как закрыть сеанс, когда браузер закрыт. – 2013-04-29 06:23:31

+0

http://stackoverflow.com/questions/6622461/how-to-capture-browser-close- event-in-javascript –

+0

благодарит за ответ. Ну, у меня последнее требование, так как теперь я принимаю несколько логинов одновременно с использованием одного и того же имени пользователя и пароля. Например, имя пользователя x может одновременно войти в систему из mozilla, chrome и т. Д. Но я не хочу, чтобы этот способ предполагал, имя пользователя x login from mozillla, а затем он вступает в систему с chrome в mozilla, он автоматически выйдет из системы. Сообщите мне, как это сделать. – 2013-04-29 06:58:40

6

Вы можете установить время сеанса, как ниже в ServletContextListener:

session.setMaxInactiveInterval(15*60); //in seconds 

Это даст вам преимущество в том, что вы можете прочитать тайм-аут сеанса из любого внешнего файла/базы данных свойств и изменить тайм-аут сеанса без изменения кода.

Вы можете использовать событие unload и отправить запрос на выход на сервер. Или продолжайте отправлять периодические запросы на сервер, информируя пользователя, все еще активны.

+1

как закрыть сеанс, когда браузер закрыт – 2013-04-29 06:24:36

+0

@javaL проверить обновленный ответ – Apurv

2

Вам необходимо установить тайм-аут сеанса, то есть время, после которого текущий объект Session будет признан недействительным.

Это может быть сделано либо путем установки тайм-аут в вашем web.xml, как:

<session-config> 
    <session-timeout>20</session-timeout> 
</session-config> 

или программно позвонить на Session объекта

session.setMaxInactiveInterval(valueInSeconds); 

Следите за этот период тайм-аута сеанса, установленный в web.xml находится в минутах, а программно - в секундах.

+1

спасибо за ответ, но я знаю это, я хотел закончить сеанс, когда пользователь закрывает браузер – 2013-04-29 06:09:30

+0

Вы должны захватить событие закрытия браузера в javascript и выйти из системы пользователя. Найти Q/A [как захватить событие закрытия броузера] (http://stackoverflow.com/questions/6622461/how-to-capture-browser-close-event-in-javascript) –

+0

Точно и вызовите сервлет из режима событие JavaScript. – skuntsel

-1

Вы можете сделать это из файла веб-конфигурации. Образец здесь

<sessionState 
     mode="InProc" 
     stateConnectionString="tcpip=127.0.0.1:42424" 
     stateNetworkTimeout="10" 
     sqlConnectionString="data source=127.0.0.1;Integrated Security=SSPI" 
     sqlCommandTimeout="30" 
     customProvider="" 
     cookieless="UseCookies" 
     cookieName="ASP.NET_SessionId" 
     timeout="10" 
     allowCustomSqlDatabase="false" 
     regenerateExpiredSessionId="true" 
     partitionResolverType="" 
     useHostingIdentity="true"> 
     <providers> 
     <clear /> 
     </providers> 
    </sessionState> 

Свойство timeout будет определять период ожидания.

1

Невозможно установить соединение с сервером о том, что пользователь закрывает браузер. Вот почему сеансы имеют настраиваемый временной интервал. Если вы хотите сделать это, попробуйте создать событие onclose javascript, и оттуда сделайте ajax-вызов, чтобы установить сеанс близко к серверу. На сервере вы можете получить идентификатор сеанса из этого вызова в качестве параметра и убить его.

Я не пробовал. Не думайте, что это правильно.

0

Вопрос: Как завершить сеансы автоматически, если пользователь закрывает браузер?
Установить максимальный неактивный интервал значение времени меньше 0.

Пример:

HttpSession session = request.getSession(); 
session.setMaxInactiveInterval(-1); 
session.setAttribute("User", au); 
response.sendRedirect("doLogin.jsp"); 
Смежные вопросы