2013-08-27 3 views
0

Я хочу аннулировать несколько отдельных сеансов, которые я сохранил с помощью «httpsession». Можно ли аннулировать выбранные сеансы и сохранить оставшиеся сеансы в живых?Как аннулировать определенные сеансы?

+0

Что вы подразумеваете под выбранными сеансами? –

+0

Предположим, что у клиента есть имя, возраст и число атрибутов. Предположим, что я сохранил их в сеансе в качестве setession («имя», имя), setession («возраст», возраст), setession («число», число). Итак, как мне сделать недействительным только сеанс имени и сохранить остальных в живых? –

ответ

1

Есть два способа аннулировать сессию в сервлет/JSP

1 - session.invalidate();

2 - session.removeAttribute ("xyz");

к аннулированию конкретной сессии мы используем 2-й вариант вместо АБВ вы поставить любое имя сеанса там

+1

(2) - вздор. Атрибуты сеанса не являются сеансами. – EJP

2

Да, просто позвоните HttpSession.invalidate() или HttpSession.logout() (Servlet 3.0).

+0

не приведет к аннулированию всех сеансов связанного клиента? –

+0

@chaodee Нет, это приведет к аннулированию сеанса, на который вы его назовете. – EJP

+0

это полезно, если вы хотите аннулировать всю сессию. но предположим, что я хочу удалить определенную сессию или переменную из сеанса, а не то, что. Если у вас есть лучший способ, чем session.removeAttribute ("xyz"), чем объяснять. но помните, что я хочу просто удалить переменную из сеанса не всей сессии. –

-1

Решение «EJP» отлично подходит для текущего сеанса. Но если Вы хотите, чтобы аннулировать любой сеанс (на основе указанного JSessionID) вот ответ: How to invalidate selected session programmatically?

+0

Он отлично работает для любой сессии. – EJP

+0

Можете ли вы рассказать мне, как это сделать? У меня был тот же самый проблемный месяц (или два) назад. Поэтому возникает вопрос: как я могу аннулировать сеанс с выбранным id (i.e 'xyz') из разных сеансов. – pWoz

+0

Получить сеанс, как показано в вашей ссылке, а затем вызвать один из API, упомянутый в моем ответе. – EJP

0

Я написал метод, который делает недействительным сеанс с данным SESSIONID:

public void expireSessionWithId(String sessionID) 
{ 
    try { 
     MBeanServer server = java.lang.management.ManagementFactory.getPlatformMBeanServer(); 

     ObjectName objectName=new ObjectName("jboss.web:type=Manager,path=/test,host=default-host"); 

     // declare signature of the parameter 
     String[] sig = { "java.lang.String"}; 
     // declare parameter 
     Object[] opArgs1 = { sessionID }; 
     // call the method 
     String value = (String) server.invoke(objectName, "expireSession", 
       opArgs1, sig); 

     System.out.println(value); 
    } catch (MalformedObjectNameException e) { 
     //handle the exception 
    } catch (InstanceNotFoundException e) { 
     //handle the exception 
    } catch (ReflectionException e) { 
     //handle the exception 
    } catch (MBeanException e) { 
     //handle the exception 
    } 

} 

я работаю над JBoss -7.1.1.Final. Мое приложение называется «test», отсюда и корневой контекст «/ test». Вы должны создать objectName с именем вашего приложения.

+0

Ваш ответ специфичен для JBoss, и JBoss не упоминается в вопросе. -1 – EJP

1

я думаю, что это лучший способ, чтобы аннулировать конкретную сессию не полностью

session.invalidate(); 

и

session.removeAttribute("username"); 
Смежные вопросы