Sessões
Cookies HTTP
Sessões
Atributos de sessão
O problema
O protocolo HTTP não mantém estado
entre transações distintas
Ao término do atendimento da requisição, a
conexão TCP é fechada pelo servidor
Toda requisição é vista como nova e nunca
como continuação de uma anterior
Problema
Como implementar aplicações que necessitam
de estado entre transações HTTP distintas, tais
como, carrinhos de compras, web-mail, etc?
O problema
Exemplo: uma sessão de web-mail.
Cookies
Problema
Como fazer o servidor "entender" que a terceira transação
HTTP é um pedido de listagem de um usuário que já se
logou no sistema?
A Netscape definiu o conceito de cookie
Um cookie é um pedaço de informação importante
O servidor envia o cookie para o cliente
O cliente mantém o cookie em memória ou disco
Cada vez que o cliente se conectar com o servidor
devolve o cookie para ele
Cookies
Exemplo: Depois que o login do usuário foi
validado com sucesso.
Cookies
Exemplo:
Ao solicitar a listagem das mensagens, o browser
envia o cookie de identificação do cliente
Sessões e Cookies
Cookie é uma forma de implementar sessões no HTTP
Cookies
Problemas com esse mecanismo:
É chato ficar tendo que identificar o cookie com a
identificação dos outros cookies existentes;
Deve-se definir datas de expiração para o cookie (não
é automático);
É dever do programador criar estruturas que associem
objetos de negócio com a sessão criada pelo cookie;
É dever do programador gerar os números de
identificação únicos para cada sessão;
A API possui objetos para lidar com cookies
HTTP em alto nível.
Reescrita de URL
Outra forma de implementar sessões no
protocolo HTTP
Um identificador é anexado a toda URL trocada
entre o browser e o cliente
http://servidor:8080/recurso?jsessionid =123
Qualquer URL que o servlet produza como parte
da resposta deve ter a identificação anexada
O browser não trata essa identificação, apenas
a devolve intacta no final da URL
"Ping-pong" de identificador!
Reescrita de URL
Problemas com esse mecanismo:
É chato ficar anexando identificadores em todas as
URLs
O mecanismo de identificação da sessão é feito pelo
programador
É dever do programador criar estruturas que
associem objetos de negócio com a sessão criada
pelo mecanismo de reescrita
A API de servlets possui métodos para gerar os
identificadores de URL automaticamente
Resumo: Cookies e Reescrita
Sessões em servlets
A interface HttpSession define um objeto de
sessão
O objeto da requisição é responsável por criar uma
nova sessão ou devolver a sessão atualmente
aberta:
HttpSession sessao = request.getSession(true);
HttpSession sessao = request.getSession();
Ou então devolver null se a sessão não existir:
HttpSession sessao = request.getSession(false);
A próxima requisição fará parte da sessão aberta
por este servlet
Atributos de sessão
O mecanismo de sessões apenas identifica a
qual cliente pertence a sessão
Quaisquer dados associados ao cliente precisam
ser mantidos no servidor pelo programador
Ex: produtos já comprados numa sessão de compras
ou permissões e outras informações
Métodos para ler/criar/remover atributos de
sessão
Object getAttribute (String nome)
void setAttribute (String nome, Object atributo)
void removeAttribute (String nome)
Atributos de sessão
Exemplo do carrinho de compras
Atributos de sessão
Trecho de código no doGet() de CompraServlet
!
"
#$
%
$
"
&
Atributos de sessão
Exemplo de webmail
Atributos de sessão
Trecho de código no doGet() de LoginServlet
'
$$
(
)
!
*
+
$
$
"
,
"
!
+
$
)
Atributos de sessão
Trecho de código no doGet() de AbreMsgServlet
-
!. (
/
+
'
0
!
"
)
)
'
$
)
12
!
! *34!
Finalização de sessões
Quando não se deseja mais manter a sessão entre
requisições, deve-se invalidá-la
void invalidate ()
void setMaxInactiveInterval (int seg)
Outros métodos de HttpSession
public String getId(): identificador da sessão
public boolean isNew(): true se a sessão for recém criada
public long getCreationTime(): data em que a sessão foi
criada
public long getLasAccessedTime(): data do último
acesso
public int getMaxInactiveInterval(): valor do maior
intervalo sem uso para a sessão
Download

Sessões