Você está na página 1de 24

Servlets

Controle de sesses
Profa. Karen Selbach Borges

Para comear ...


Sesso Seo Cesso
Sesso : sesso de cinema
Seo (ou seco) : seo de vendas
Cesso : cesso de direitos
Java tambm e cultura !
Todo Mundo Tem Dvidas, Inclusive Voc
Prof. dison de Oliveira
Editora Sagra.

Sesses
O protocolo HTTP no suporta informaes
permanentes que poderiam ajudar um
servidor Web a determinar que uma
solicitao de um cliente particular.
As sesses servem para identificar o
usurio durante vrias requisies ou
visitas a um site da Web
A sesso de um usurio persiste durante
um perodo de tempo que normalmente
configurado no servidor

Introduo
O Servlet API fornece 3 maneiras de
controlar o estado do cliente :
Cookies
Reescrita de URL
Monitoramento de sesso

Cookies
Mecanismo utilizado por um servlet para
armazenar uma pequena quantidade de
informao de estado associado a um
cliente.
Exemplos de uso :
Quando o cliente loga-se em um site, verificar
se ele j esteve neste site
Armazenar informaes a respeito das
preferncias do usurio

Cookies
So pequenos arquivos enviados pela
servlet como parte de uma resposta ao
cliente, que ficam armazenados na
mquina do cliente.
Quando um HttpServlet recebe uma
solicitao, o cabealho inclui as
informaes (ex. tipo de solicitao GET
ou POST) e os cookies armazenados na
mquina do cliente.

Cookies
So automaticamente excludos quando
expiram (isto , alcanam sua idade
mxima).
mtodo setMaxAge(int segundos)
Segundos < 0 : cookie expira assim que o
navegador fechar
Segundos == 0 navegador apaga o cookie.

Adicionando Cookies
O mtodo addCookie permite o envio de um
cookie ao cliente junto da resposta;
O cookie representado por um objeto da
classe javax.servlet.http.Cookie;
O cookie deve ter um nome e um valor, para tanto
utiliza-se o construtor:
public Cookie(String name, String value);

Criando e Recuperando Cookies


Criando e enviando um cookie:
Cookie cookie = new Cookie(id,100234);
response.addCookie(cookie);

Recuperando um cookie:
Cookie cookies[] = request.getCookies();
if (cookies != null) {
for (int i = 0; i < cookies.length; i++) {
if (cookies[i].getName().equals("id")) {
String identifica = cookies[i].getValue(); }}}

Cookies
Problemas
Muitas pessoas desativam cookies por
questes de privacidade

Reescrita de URL
Reescita de URL a soluo para clientes
que no suportam ou tenham sido
configurados para rejeitar cookies.
Exemplo:
http://host.path/file.html;jsessionid=1234

Reescrita de URL
Mtodo que associa uma ID de sesso
com uma URL o
response.encodeURL(String url)
Mtodo que associa uma ID de sesso e
redireciona para outra pgina o
response.encodeRedirectURL(String url)

Reescrita de URL
Problemas:
No suporta o armazenamento de pares
nome/valor como as cookies
As informaes podem ser perdidas no caso
de uso de retornar ao site atravs de
bookmarks, links ou se a URL for inserida
manualmente.

Funciona melhor em pginas JSP


(veremos isso mais adiante)

Monitoramento de Sesso
A maneira mais eficiente para fazer o
monitoramento de sesso atravs do
uso da API HttpSession.
O fornecedor do continer Web
implementa essa interface, e a cada
usurio dentro do site pode ser atribudo
um objeto de sesso no servidor

Monitoramento de Sesso
O objeto session tem dois papis-chave:
Ele armazena informaes sobre data e hora
de criao e de ltimo acesso para uma
sesso particular, junto com um ID de sesso
nico;
Ele tambm permite que outros objetos sejam
amarrados sesso (carrinho de compras,
por exemplo)

Criando Objetos de Sesso


A forma pela qual associamos objetos de
sesso a um cliente associando um
objeto HttpSession para cada objeto
HttpServletRequest (pedido).
HttpSession session = request.getSession(true);
True : se o cliente j tem o objeto HttpSession de uma
solicitao anterior, ento o mtodo getSession retorna
este objeto. Caso contrrio cria o objeto HttpSession.
False : se no existir um objeto HttpSession, ento o
servlet no deve criar um novo objeto.

Criando Objetos de Sesso

Cada objeto HttpSession tem um id


(nica) que uma String criada quando
o objeto criado.
session. setAttribute(nome, obj);
Onde :

Nome: identificador nico do objeto da sesso


Obj : objeto da sesso.

Os objetos persistem at o trmino da


sesso ou at a sesso expirar de forma
automtica ou explcita.

Recuperando Objetos de Sesso


O mtodo getAttributeNames recupera o valor
dos nomes dos objetos de sesso
disponveis.
HttpSession session = request.getSession(false);
if (session != null) {
Enumeration nomes = session.getAttributeNames();
while (nomes.hasMoreElements()) {
String nome = (String) nomes.nextElement();
}
}

Recuperando Objetos de Sesso


O mtodo getAttribute recupera o valor
associado a um determinado nome
Ou seja, recebe o nome e retorna uma
referncia ao Object para o valor
correspondente.
Usuario valor= (Usuario) session.getAttribute("usuario");
out.println("Ol : " + value.getNome() +" !<br>");

Outros Mtodos
void removeAttribute(String nome) :
remove da sesso o objeto associado ao
nome.
String getId() : retorna o valor do
identificador nico da sesso.
long getCreationTime() : retorna a data e
hora (milisegundos) em que o objeto foi
criado.

Outros Mtodos
long getLastAccessdTime() : retorna o a
data e hora (milisegundos) no qual ocorreu
o ltimo pedido enviado pelo cliente da
sesso
ServletContext getServletContext(): retorna
o ServletContext atual para a sesso
boolean isNew(): retorna true se a sesso
atual no estiver sendo utilizada pelo cliente

Outros Mtodos
void setMaxInactiveInterval(int intervalo) :
configura o tempo mximo em
milisssegundos que o container manter a
sesso se o usurio no fizer requisies.
int getMaxInactiveInterval() : retorna o
intervalo mximo em milisssegundos que
o usurio pode ficar sem fazer requisies
sem que sua sesso seja invalidada.

Encerrando uma Sesso


As sesses tem um tempo limite alocado
para elas(padro 30 minutos).
possvel terminar uma sesso
explicitamente (em geral quando o
usurio faz o logout)
Utilizar o mtodo invalidate().
if (session !=null) session.invalidate();

Você também pode gostar