2015-04-13 2 views
6

Я хочу убить сеанс после закрытия браузера или закрыть вкладку. И мне нужно сделать одно подключение к базе данных после окончания сеанса с использованием Session Listener. Но для что мне нужно подождать, пока сессия не разрушится.Мне нужно убить сеанс и выполнить одну функцию после закрытия браузера или закрыть вкладку

Вот код, который выполняется при уничтожении сеанса.

public void sessionDestroyed(HttpSessionEvent event) { 
     synchronized (this) { 
      //System.out.println("deletion"); 
      ServletContext application = event.getSession().getServletContext(); 
      sessionCount = (Integer) application.getAttribute("SESSION_COUNT"); 
      application.setAttribute("SESSION_COUNT", sessionCount=sessionCount - 1); 
      //application.setAttribute("SESSION_COUNT", --sessionCount); 


      try 
      { 
       Class.forName("com.mysql.jdbc.Driver"); 
      } 
      catch (ClassNotFoundException e) { 
       System.out.println("" + e); 
      } 

      Connection connection = null; 
      try { 
       connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/raptor1_5", "root", ""); 
       Statement st = connection.createStatement(); 

       st.executeUpdate("update adminlogin set Password='admin' where Username='admin'"); 

      } catch (SQLException e) { 
       e.printStackTrace(); 
      } 

     } 
     System.out.println("Session Destroyed: " + event.getSession().getId()); 
     System.out.println("Total Sessions after delete: " + sessionCount); 
    } 

Но я не хочу ждать, пока сеанс destroys.I не нужно делать этот код после того, как браузер получает close.Hope кто-то получит меня из-за этого.

Спасибо

ответ

2

Если вы используете jquery вы можете слушать для unload события

https://api.jquery.com/unload/

или с помощью JS

window.onbeforeunload = function() {... 

Тогда Каус вы могли стрелять некоторые Ajax позвонить код на стороне сервера.

+0

да я тоже пытался использовать onbeforeunload функцию, но она выполняет не только для близкого события также он выполняет для кнопки обновления. –

+0

Да, это правда. Все, что он знает, это то, что вы покидаете страницу –

+0

, оставляя страницу без аннулирования сеанса, только моя проблема –

2

ОбнаружениеClose Event и Invalidate сессии в браузера, с помощью

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

Как обнаружить браузер Закрыть событие?

$(document).ready(function() 
{ 
$(window).bind("beforeunload", function() { 
    return confirm("Do you really want to close?"); // here you can invalidate 
}); 
}); 

Update

How to differentiate between Browser Close and Refresh Event ??

+0

Neeraj Я пробовал этот код, но он также выполняет обновление окна. Мне нужно только для закрытия вкладки или закрытия окна не для события обновления –

+0

Отъезд Обновленный ответ, Надеюсь, что это поможет! –

+0

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

Смежные вопросы