Salve Salve Galera!
Alguém sabe como faço para uma sessão expirar depois de X tempo?
Existe algum método que é chamado quando uma sessão expirou?
Atn.
Dennys Fredericci
Salve Salve Galera!
Alguém sabe como faço para uma sessão expirar depois de X tempo?
Existe algum método que é chamado quando uma sessão expirou?
Atn.
Dennys Fredericci
no web.xml
<session-config>
<!-- 30 minutos -->
<session-timeout>30</session-timeout>
</session-config>
pra invalidar uma sessão pode usar
request.getSession().invalidate();
tu pode implementar um SessionListener, nele, tu tens a disposição o método sessionDestroyed(), q é chamado sempre q uma sessão é encerrada 
E aí beleza?
Meu problema é semelhante só que gostaria de derrubar a sessão no momento que o tomcat caisse. quano derrubo o tomcat e alguém tiver com uma sessão aberta. assim que estarto o tomcat ele continua na mesma sessão.
Como derrubar a sessão junto com o tomcat? tem como e captar este evento? Em que momento posso usar o SessionDetroy()?
perai, deixa eu ver se eu entendi… tu quer q, qnd tu restartar o tomcat, ele recupere todas as sessões q estavam ativas no momento do shutdown??? :roll: … sem chance, ele vai desalocar toda a memória q alocou, vai perder todas as referencias…
Na verdade cara, acontece justamente o “contrário”.
Não me expressei bem no meu poste.
O que quero é derrubar a sessão quando o tomcat cair.
Hoje toda vez que derrubo o tomcat, e o levanto o usuario continua na mesma sessão. Não gostaria que isso continuasse. Gostaria de derrubar a sessão e retornar a tela de login.
credo, nem sabia q isso era possivel… bem, mas tu vai usar a interface listener q eu disse, e no método sessionDestroyed( SessionEvent e ), tu pode fazer:
public void sessionDestroyed( SessionEvent e ) {
e.getSession().invalidate();
}
e claro, configure o listener no DD (web.xml):
<listener>
<listener-class>com.foo.ClasseQueImplementaOListener</listener-class>
</listener>
Desculpe minha ignorância mas eu faço isso onde? Eu estou usando o struts, implemento esta intarface no action?
não é na action não, tu implementa ela numa classe qualquer, por ex:
package com.foo.listener;
// imports
public class MyListener implements SessionListener {
public void sessionCreated( SessionEvent e ) {
}
public void sessionDestroyed( SessionEvent e ) {
e.getSession().invalidate();
}
}
ai no web.xml:
<listener>
<listener-class>com.foo.listener.MyListener</listener-class>
</listener>
[quote=“matheus”]não é na action não, tu implementa ela numa classe qualquer, por ex:
package com.foo.listener;
// imports
public class MyListener implements SessionListener {
public void sessionCreated( SessionEvent e ) {
}
public void sessionDestroyed( SessionEvent e ) {
e.getSession().invalidate();
}
}
ai no web.xml:
<listener>
<listener-class>com.foo.listener.MyListener</listener-class>
</listener>
[/quote]
Nossa cara… eu fiz isso e o Tomcat gera uma Exception, quando lê o meu web.xml.
Exception:
06/05/2005 21:55:19 org.apache.coyote.http11.Http11Protocol init
INFO: Initializing Coyote HTTP/1.1 on http-8080
Starting service Tomcat-Standalone
Apache Tomcat/4.1.31
06/05/2005 21:55:21 org.apache.commons.digester.Digester error
SEVERE: Parse Error at line 36 column 11: The content of element type "web-app" must match "(icon?,display-name?,description?,dist
ributable?,context-param*,filter*,filter-mapping*,listener*,servlet*,servlet-mapping*,session-config?,mime-mapping*,welcome-file-l
ist?,error-page*,taglib*,resource-env-ref*,resource-ref*,security-constraint*,login-config?,security-role*,env-entry*,ejb-ref*,ejb
-local-ref*)".
org.xml.sax.SAXParseException: The content of element type "web-app" must match "(icon?,display-name?,description?,distributable?,
context-param*,filter*,filter-mapping*,listener*,servlet*,servlet-mapping*,session-config?,mime-mapping*,welcome-file-list?,error-
page*,taglib*,resource-env-ref*,resource-ref*,security-constraint*,login-config?,security-role*,env-entry*,ejb-ref*,ejb-local-ref*
)".
at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
at org.apache.xerces.util.ErrorHandlerWrapper.error(Unknown Source)
at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
at org.apache.xerces.impl.dtd.XMLDTDValidator.handleEndElement(Unknown Source)
at org.apache.xerces.impl.dtd.XMLDTDValidator.endElement(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanEndElement(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.DTDConfiguration.parse(Unknown Source)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
at org.apache.commons.digester.Digester.parse(Digester.java:1548)
at org.apache.catalina.startup.ContextConfig.applicationConfig(ContextConfig.java:220)
at org.apache.catalina.startup.ContextConfig.start(ContextConfig.java:579)
at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:181)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:3523)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1141)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:707)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1141)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:316)
at org.apache.catalina.core.StandardService.start(StandardService.java:450)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:2143)
at org.apache.catalina.startup.Catalina.start(Catalina.java:463)
at org.apache.catalina.startup.Catalina.execute(Catalina.java:350)
at org.apache.catalina.startup.Catalina.process(Catalina.java:129)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:156)
06/05/2005 21:55:21 org.apache.struts.util.PropertyMessageResources <init>
INFO: Initializing, config='org.apache.struts.util.LocalStrings', returnNull=true
06/05/2005 21:55:21 org.apache.struts.util.PropertyMessageResources <init>
INFO: Initializing, config='org.apache.struts.action.ActionResources', returnNull=true
06/05/2005 21:55:22 org.apache.struts.util.PropertyMessageResources <init>
INFO: Initializing, config='org.apache.webapp.admin.ApplicationResources', returnNull=true
06/05/2005 21:55:28 org.apache.coyote.http11.Http11Protocol start
INFO: Starting Coyote HTTP/1.1 on http-8080
06/05/2005 21:55:28 org.apache.jk.common.ChannelSocket init
INFO: JK2: ajp13 listening on /0.0.0.0:8009
06/05/2005 21:55:28 org.apache.jk.server.JkMain start
INFO: Jk running ID=0 time=0/131 config=C:\Tomcat\conf\jk2.properties
Meu web.xml está assim:
<?xml version="1.0" ?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<filter>
<filter-name>Filtro</filter-name>
<filter-class>br.com.delta.filtros.Filtro</filter-class>
</filter>
<filter-mapping>
<filter-name>Filtro</filter-name>
<url-pattern>/servlets/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>servlet</servlet-name>
<servlet-class>br.com.delta.servlets.Servlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>servlet</servlet-name>
<url-pattern>/servlets/TesteServlet</url-pattern>
</servlet-mapping>
<!-- Lista de Boas Vindas -->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<listener>
<listener-class>br.com.delta.YMFSessionListener</listener-class>
</listener>
</web-app>
O engraçado é que eu coloquei no construtor da da classe que implementa HttpSessionListener um System.out.println(“teste”); e é impresso normal…
O que pode ser?
Porque o tomcat gera esta exception?
Atn.
Dennys Fredericci
se vc ler o erro, vai notar q a declaração de listener tem q vir antes da declaração de servlet…
hum… saquei, não tinha percebido que existe um lugar obrigatório… agora percebi…
valeu!
Atn.
Dennys Fredericci
Pessoalll …
Ainda estou com uma duvida … na minha implementação eu tenho o Listener ( com os metodos sessionCreated, sessionDestroyed, etc e tal) o meu web.xml esta configurado corretamente … a duvida eh a seguinte: como faço para informar a minha pagina jsp que destrua uma sessão??
Neste trecho de codigo eu verifico o valor da variavel de sessão, se for exit eu deleto o nome do usuario da base de dados e queria destruir a sessão dele !!!
[quote]if(request.getParameter(“local”).equals(“exit”)){
PreparedStatement stmtDel = null;
int execDel = 0;
//remover o usuário atual da base de dados
try {
query = “delete from estatisticas_online where nomeContato= '”+session.getValue(“nomecontato”)+"’";
stmtDel = conUtilDB.prepareStatement(query);
execDel = stmtDel.executeUpdate();
} catch(SQLException e){
//e.printStackTrace();
} finally{
stmtDel.close();
session.invalidate();
execDel = 0;
}[/quote]
Abraços,
[quote=“Spirulita”]a duvida eh a seguinte: como faço para informar a minha pagina jsp que destrua uma sessão??
[/quote]
chamando invalidate() ué… hehehe
Olá …
Entaum … eu usei o invalidate() …
O meu problema eh o seguinte: eu tenho um contador que verifica qtas sessões foram abertas. Ate ai funciona uma beleza!! Agora eu faço o seguinte teste: Faço login na pagina e depois o Logoff e repito essa ação umas 5 vezes … na hora que vou ver qtas sessões estão abertas … o meu contador me mostra 5!!! Eu queria que toda vez que o usuaria fizese o logoff a sessão fosse destruida!!
Entendeu a minha duvida?!?!
Abraços,
como foi dito acima use:
session.invalidate();

faça um teste… abra o browser, faça uma requisição, e veja o contador em 1… depois abra outro browser e veja o contador em 2… depois feche um deles e de refresh no outro, o contador deve ir para 1…
agora, mude no seu código, coloque um invalidate() caso request.getParameter( “foo” ) != null. Abra um browser e faça uma requisição, e veja o contador em 1… abra outro browser e faça o mesmo… o contador irá para 2… agora em um desses browsers faça de novo a requisição mas passando um parametro ?foo=abc… o contador deve ir para 1 de novo… teoricamente falando! haehaehahae
Pessoal …
Muito obrigada pela ajuda … acabei entendendo o que o contador estava fazendo de errado!!
Abraços,