Top Banner
Servlets Controle de sessões Profa. Karen Selbach Borges
24

4-ControleSessoes

Dec 08, 2015

Download

Documents

Jean Lopes

jsp controle de sessoes
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 4-ControleSessoes

ServletsControle de sessões

Profa. Karen Selbach Borges

Page 2: 4-ControleSessoes

Para começar ...

Sessão ≠ Seção ≠ Cessão• Sessão : sessão de cinema

• Seção (ou secção) : seção de vendas

• Cessão : cessão de direitos

Java também e cultura !

Todo Mundo Tem Dúvidas, Inclusive VocêProf. Édison de OliveiraEditora Sagra.

Page 3: 4-ControleSessoes

Sessões

• O protocolo HTTP não suporta informações permanentes que poderiam ajudar um servidor Web a determinar que uma solicitação é de um cliente particular.

• As sessões servem para identificar o usuário durante várias requisições ou visitas a um site da Web

• A sessão de um usuário persiste durante um período de tempo que normalmente é configurado no servidor

Page 4: 4-ControleSessoes

Introdução

• O Servlet API fornece 3 maneiras de controlar o estado do cliente :– Cookies – Reescrita de URL– Monitoramento de sessão

Page 5: 4-ControleSessoes

Cookies

• Mecanismo utilizado por um servlet para armazenar uma pequena quantidade de informação 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 informações a respeito das

preferências do usuário

Page 6: 4-ControleSessoes

Cookies

• São pequenos arquivos enviados pela servlet como parte de uma resposta ao cliente, que ficam armazenados na máquina do cliente.

• Quando um HttpServlet recebe uma solicitação, o cabeçalho inclui as informações (ex. tipo de solicitação GET ou POST) e os cookies armazenados na máquina do cliente.

Page 7: 4-ControleSessoes

Cookies

• São automaticamente excluídos quando expiram (isto é, alcançam sua idade máxima).– método setMaxAge(int segundos)

• Segundos < 0 : cookie expira assim que o navegador fechar

• Segundos == 0 navegador apaga o cookie.

Page 8: 4-ControleSessoes

Adicionando Cookies

• O método 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);

Page 9: 4-ControleSessoes

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(); }}}

Page 10: 4-ControleSessoes

Cookies

• Problemas– Muitas pessoas desativam cookies por

questões de privacidade

Page 11: 4-ControleSessoes

Reescrita de URL

• Reescita de URL é a solução para clientes que não suportam ou tenham sido configurados para rejeitar cookies.

• Exemplo:– http://host.path/file.html;jsessionid=1234

Page 12: 4-ControleSessoes

Reescrita de URL

• Método que associa uma ID de sessão com uma URL é o response.encodeURL(String url)

• Método que associa uma ID de sessão e redireciona para outra página é o response.encodeRedirectURL(String url)

Page 13: 4-ControleSessoes

Reescrita de URL

• Problemas:– Não suporta o armazenamento de pares

nome/valor como as cookies– As informações podem ser perdidas no caso

de uso de retornar ao site através de bookmarks, links ou se a URL for inserida manualmente.

• Funciona melhor em páginas JSP (veremos isso mais adiante)

Page 14: 4-ControleSessoes

Monitoramento de Sessão

• A maneira mais eficiente para fazer o monitoramento de sessão é através do uso da API HttpSession.

• O fornecedor do contêiner Web implementa essa interface, e a cada usuário dentro do site pode ser atribuído um objeto de sessão no servidor

Page 15: 4-ControleSessoes

Monitoramento de Sessão

• O objeto session tem dois papéis-chave:– Ele armazena informações sobre data e hora

de criação e de último acesso para uma sessão particular, junto com um ID de sessão único;

– Ele também permite que outros objetos sejam amarrados à sessão (carrinho de compras, por exemplo)

Page 16: 4-ControleSessoes

Criando Objetos de Sessão

• A forma pela qual associamos objetos de sessão 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

solicitação anterior, então o método getSession retorna este objeto. Caso contrário cria o objeto HttpSession.

– False : se não existir um objeto HttpSession, então o servlet não deve criar um novo objeto.

Page 17: 4-ControleSessoes

Criando Objetos de Sessão

• 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 sessão• Obj : objeto da sessão.

– Os objetos persistem até o término da sessão ou até a sessão expirar de forma automática ou explícita.

Page 18: 4-ControleSessoes

Recuperando Objetos de Sessão

• O método getAttributeNames recupera o valor dos nomes dos objetos de sessão disponíveis.

HttpSession session = request.getSession(false);

if (session != null) {

Enumeration nomes = session.getAttributeNames();

while (nomes.hasMoreElements()) {

String nome = (String) nomes.nextElement();

}

}

Page 19: 4-ControleSessoes

Recuperando Objetos de Sessão

• O método getAttribute recupera o valor associado a um determinado nome

• Ou seja, recebe o nome e retorna uma referência ao Object para o valor correspondente.

Usuario valor= (Usuario) session.getAttribute("usuario"); out.println("Olá : " + value.getNome() +" !<br>");

Page 20: 4-ControleSessoes

Outros Métodos

• void removeAttribute(String nome) : remove da sessão o objeto associado ao nome.

• String getId() : retorna o valor do identificador único da sessão.

• long getCreationTime() : retorna a data e hora (milisegundos) em que o objeto foi criado.

Page 21: 4-ControleSessoes

Outros Métodos

• long getLastAccessdTime() : retorna o a data e hora (milisegundos) no qual ocorreu o último pedido enviado pelo cliente da sessão

• ServletContext getServletContext(): retorna o ServletContext atual para a sessão

• boolean isNew(): retorna true se a sessão atual não estiver sendo utilizada pelo cliente

Page 22: 4-ControleSessoes

Outros Métodos

• void setMaxInactiveInterval(int intervalo) : configura o tempo máximo em milisssegundos que o container manterá a sessão se o usuário não fizer requisições.

• int getMaxInactiveInterval() : retorna o intervalo máximo em milisssegundos que o usuário pode ficar sem fazer requisições sem que sua sessão seja invalidada.

Page 23: 4-ControleSessoes

Encerrando uma Sessão

• As sessões tem um tempo limite alocado para elas(padrão é 30 minutos).

• É possível terminar uma sessão explicitamente (em geral quando o usuário faz o logout)

• Utilizar o método invalidate().

if (session !=null) session.invalidate();

Page 24: 4-ControleSessoes