Fim da sessão

23 respostas
W

Ae galera …
seguinte … eu fiz uma aplicaçãozinha de acesso ao sistema … tipo o kra coloca senha ele valida e blz … soh q eu estou com um pequeno problema . Tipo quando o kra da um logout ele volta pra tela inicial. até ai blz … mas se ele apertar o avancar do navegador ele volta como se tivesse logado …

como eu faço pra sessão expirar:?!?!

Valeu ae !!!

23 Respostas

J

ai vai cara um códigozinho para remover o atributo da sua sessão.

HttpSession ses = request.getSession();
        if(ses.getAttribute("SessaoUsuario")!=null)
        {
            ses.removeAttribute("SessaoUsuario");
        }

além disso, vc pode invalidar a sessao inteira, dependendo do caso vc precisará, e o método pra isso tomando o exemplo acima seria:

ses.invalidate();

Espero ter ajudado ai!

abraço!

D

onde eu tava mexendo com isso…
e nao funcionou legal…
se eu tivesse acabado de fazer logoff de depois SEM FECHAR o browser e digitasse o endereço direto de algum servlet q na teoria só teria q funcionar se a sessao estivesse aberta, abria a pagina normal!
mas se eu fechasse o browser e tentasse acessar alguma pagina q necessita de sessão aí sim nao abria e exibia uma msg q a sessao nao está aberta…

pq acontece isso?
ah! tem outra coisa!
eu setei minha sessao pra desativar automaticamente se ficasse inativa por 1 min… e se eu deixasse passar esse 1 minuto… a sessao expirava… e era redirecionado pra uma pagina de erro…
aí se eu tentasse acessar a pagina (essa q a sessao expirou) aí nao abria (funcionou)… mas qualquer outro servlet q usa a mesma sessão abria normalmente sem precisar fazer login…

estranho né?
ou é bug do programador mesmo? heheh :lol: :lol:

acho q está mais para a ultima opção! :stuck_out_tongue: :stuck_out_tongue:

D

:roll: :roll:

mas aí… tem esquema de nao deixar o cara voltar? pelo browser?
tipo, até da pra voltar… mas o servlet logo ve q a sessão nao está aberta e manda de volta pra msg de erro?

J

exatamente o que o New_Radical disse, vc voltando pelo browser ele vai voltar a pagina anterior conforme ela estava, pois ja está em cache, porem se vc voltar para ela e der um refresh, ele nao deverá aparecer, pois nao esta mais logado. entende?!

acho que eh isso!

cya!

eltonk

tente setar um atributo na sessão, e qndo clicar em logout retire esse atributo, tipo:

Qndo o cara loga…
session.setAttribute(“logado”, new Boolean(true));

Qndo desloga…
session.setAttribute(“logado”, new Boolean(false));

Ae vc testa esse atributo nas páginas onde quem não for logado não deverá ter acesso…

Eu faço assim, e funciona legal =)

Abraços,

W

Eu to fazendo assim da forma q vc falou eltonk,
mas eu fazendo assim toda hr eu tenho q testar e o kra vai conseguir voltar se ele der o back no navegador soh q naum vai conseguir acessar nenhum informação … naum eh !!!

naum tem como quando o kra apertar o back no navegador ja expirar a sessão ?!?!?!

como se fosse desabilitar o back do navegador…

eltonk

Nas Páginas JSP (Visão do meu projeto) eu adiciono o seguinte código:

<%
response.setHeader("Cache-Control","no-cache"); //HTTP 1.1
response.setHeader("Pragma","no-cache"); //HTTP 1.0
response.setDateHeader ("Expires", 0); //nao salva cache no servidor proxy
%>

Isso faz com que a página não seja salva em cache… Mas não encerra a sessão…
O que vc pode configurar eh um tempo menor para a sessão se encerrar. Eu sempre deixo 5min… acho um tempo bom para páginas com acessos restritos…
Lembrando tb, que se o browser é fechado, a sessão morre ali tb…

W

seguinte

eu coloquei esse codigo no meu JSP

<% 
response.setHeader("Cache-Control","no-cache"); //HTTP 1.1 
response.setHeader("Pragma","no-cache"); //HTTP 1.0 
response.setDateHeader ("Expires", 0); //nao salva cache no servidor proxy 
%>

quando eu dou aperto o back do navegador a pagina esta expirada de boa … soh q se vc apertar o refresh na pagina expirada, ele aparece logado …!!!

pq?!!?!?!?! 8O

M

“New__Radical”:
“eltonk”:
Nas Páginas JSP (Visão do meu projeto)

<%
response.setHeader("Cache-Control","no-cache"); //HTTP 1.1
response.setHeader("Pragma","no-cache"); //HTTP 1.0
response.setDateHeader ("Expires", 0); //nao salva cache no servidor proxy
%>

… Lembrando tb, que se o browser é fechado, a sessão morre ali tb…


Onde que tem dizendo que se o browser é fechado a sessão é fechada?

…isto não é o comportamento normal? bem, independente do código do elton, se tu fechar o browser, a sessão é fechada… :wink:

eltonk

New_Radical

De que tipo de sessão vc está falando?!?!
Tu é deste mundo?! :stuck_out_tongue:
:space:
Com todas as letras, S I M, quando o browser é fechado a tua sessão é morta…
Não existem possibilidades de um usuário abrir o browser novamente entrar na página do seu banco e o seu login (feito alguns segundos antes e que vc depois fechou o browser) ainda permanecer ativo.
Pode ser na mesma máquina, na máquina do lado, lá na China…

M

“New__Radical”:
“matheus”:
“New__Radical”:
“eltonk”:
Nas Páginas JSP (Visão do meu projeto)

<%
response.setHeader("Cache-Control","no-cache"); //HTTP 1.1
response.setHeader("Pragma","no-cache"); //HTTP 1.0
response.setDateHeader ("Expires", 0); //nao salva cache no servidor proxy
%>

… Lembrando tb, que se o browser é fechado, a sessão morre ali tb…


Onde que tem dizendo que se o browser é fechado a sessão é fechada?

…isto não é o comportamento normal? bem, independente do código do elton, se tu fechar o browser, a sessão é fechada… :wink:


Nam nam nim nam não!
Quem te disse isso?!?!?! :roll:

…ninguém me disse, é de ver acontecer mesmo! heheahaeh :smiley:

J

Bom, pelo que eu já em aulas e tudo mais, uma instancia de Session eh criada para cada pessoa mesmo, porém se o cliente(no caso o browser) é fechado a session eh finalizada. o que já não acontece com coockies.

mas na teoria a sessioon eh pra ser assim!

cya!

M

“New__Radical”:
Okay, let’s go!

Uma sessão não é destruida quando o browser é fechado não. Ela vai continuar lah, “vivendo” no servidor. O que acontece, é que o cliente não vai mais poder pegar a sessão. Mas, a sessão não morre!

…humm, ta mas… se o cliente não pode mais pegar a sessão, e ela continua viva no server, no final das contas… ela morre por tempo certo? então… tem alguma maneira de eu devolver a sessão pro cliente depois de ter fechado o browser? … se não, vai dar na mesma, com sessão viva ou não, pro cliente, ta tudo morto… :roll:

M

aaahhhnn!!! tão ta ok ok! :smiley:

B

Vou pegar uma carona no assunto e mandar a minmnha dúvida…

Como eu faço pra descobrir se o usuário ainda não logou ou se a sessão expirou?
Pelo que eu testei aqui em nenhum dos dois casos a sessão é igual a null e nos dois casos qualquer atributo que eu tento ler usando getAttribute é igual a null. O que diferencia esses dois “estados” da sessão?

Thanks :slight_smile:

G

galera, trabalhar com session realmente eh chato…

tenho uma aplicacao q trabalha em ambiente distribuido e nao eh q a session se perde qdo o servidor troca de maquina…

o rapaz se loga com uma matricula e qdo vai trocar de tela vem dados de outra… to apanhando feio pra corrigir isso

hahahaha

N

O “programador” fez gambiarra nos códigos!

N

Voltar ele até pode voltar, pois a página pode estar em cache.
Mas, usar a página, ae não. Qnd ele clicar em algum link que necessite estar logado, ae o programa não vai deixar e vai redirecionar ele para alguma página.

N

“eltonk”:
Nas Páginas JSP (Visão do meu projeto)

<%
response.setHeader("Cache-Control","no-cache"); //HTTP 1.1
response.setHeader("Pragma","no-cache"); //HTTP 1.0
response.setDateHeader ("Expires", 0); //nao salva cache no servidor proxy
%>

… Lembrando tb, que se o browser é fechado, a sessão morre ali tb…


Onde que tem dizendo que se o browser é fechado a sessão é fechada?

N

“matheus”:
“New__Radical”:
“eltonk”:
Nas Páginas JSP (Visão do meu projeto)

<%
response.setHeader("Cache-Control","no-cache"); //HTTP 1.1
response.setHeader("Pragma","no-cache"); //HTTP 1.0
response.setDateHeader ("Expires", 0); //nao salva cache no servidor proxy
%>

… Lembrando tb, que se o browser é fechado, a sessão morre ali tb…


Onde que tem dizendo que se o browser é fechado a sessão é fechada?

…isto não é o comportamento normal? bem, independente do código do elton, se tu fechar o browser, a sessão é fechada… :wink:


Nam nam nim nam não!
Quem te disse isso?!?!?! :roll:

N

Okay, let's go!

Uma sessão não é destruida quando o browser é fechado não. Ela vai continuar lah, "vivendo" no servidor. O que acontece, é que o cliente não vai mais poder pegar a sessão. Mas, a sessão não morre!

A sessão só morre se for dado um invalidate() ou se o client ficar algum tempo sem interegir com o site (isso que acaba acontecendo qnd o browser é fechado). E qnd o browser é aberto novamente, uma nova sessão é criada para ele no site.

Executem esses código, ae vcs vão ver qnd uma sessão é criada e qnd q ela é destruida.

Listener
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class Listener implements HttpSessionListener{

	/* (non-Javadoc)
	 * @see javax.servlet.http.HttpSessionListener#sessionCreated(javax.servlet.http.HttpSessionEvent)
	 */
	public void sessionCreated(HttpSessionEvent arg0) {
		
		System.out.println("Sessão criada");
	}

	/* (non-Javadoc)
	 * @see javax.servlet.http.HttpSessionListener#sessionDestroyed(javax.servlet.http.HttpSessionEvent)
	 */
	public void sessionDestroyed(HttpSessionEvent arg0) {

		System.out.println("Sessão Destruida");		
	}

}
web.xml
<web-app>
	
	<listener>
		<listener-class>Listener</listener-class>
	</listener>
	
</web-app>
index.jsp
<%
   request.getSession(true);
%>
N

“matheus”:
“New__Radical”:
Okay, let’s go!

Uma sessão não é destruida quando o browser é fechado não. Ela vai continuar lah, “vivendo” no servidor. O que acontece, é que o cliente não vai mais poder pegar a sessão. Mas, a sessão não morre!

…humm, ta mas… se o cliente não pode mais pegar a sessão, e ela continua viva no server, no final das contas… ela morre por tempo certo? então… tem alguma maneira de eu devolver a sessão pro cliente depois de ter fechado o browser? … se não, vai dar na mesma, com sessão viva ou não, pro cliente, ta tudo morto… :roll:


Só o termo de dizer que a sessão morre qnd o browser é fechado que está errado. Ela não morre pq o browser foi fechado, e sim, pq expirou.
É o quem tem dizendo na especificação. E… fui meio chato com isso, pq eu estou estudando para a certificação da SCWCD, e tem umas questões de HttpSession sobre isso, e eu errava essas questões pq dizia que a sessão morria qnd o browser era fechado.
[]'s

N

Bem…

Não entendi muito bem (Já são 23:33 e ainda tenho que fazer um trabalho de Teoria dos Autômatos e Linguagens Formais pra entregar amanhã! Muita cabeça não está muito boa depois de uma reunião com o chefe).

Mas bem, dê uma olhada na interface HttpSessionListener, ela te diz quando uma sessão foi criada e destruida.

E para saber se uma pessoa está logada ou não, verifique se na sessão tem um atributo (que vc colocou na hora que ela se logou).

Ok! (Não se espante, é simples mesmo!)

T+

Criado 11 de maio de 2004
Ultima resposta 14 de set. de 2004
Respostas 23
Participantes 8