Baixe o app para aproveitar ainda mais
Prévia do material em texto
* * Roteiro * Cookies Sessões Referências * * Cookies Os cookies permitem que um site armazene informações no computador do usuário e depois as recupere As informações são armazenadas como pares de nome-valor Há dois tipos de cookies: cookies de sessão e cookies persistentes Cookies de Sessão Permanecem no computador do cliente somente enquanto ele está visitando o seu site da Web Cookies Persistentes São armazenados em um arquivo de texto no computador do cliente, podem durar meses ou até anos * * Usando Cookies com a API de Servlets Enviado pelo objeto response (HttpServletResponse) Obtidos através do request (HttpServletRequest) Cookie cookie = new Cookie(“nome”, ”Tarcisio”); response.addCookie(cookie); Cookie[] = resquest.getCookies(); * * Criando Cookies Para criar cookies que duram mais que uma sessão (cookies persistentes no disco do cliente) é preciso Criar um novo objeto Cookie Definir a duração do cookie com o método setMaxAge() Chamando o método setMaxAge () passando -1 indica que o cookie é de sessão Definir outros métodos se necessário Adicionar o cookie à resposta * * Criando Cookies Exemplo de gravação: 1) definir um cookie que contenha o nome do usuário recebido como parâmetro na requisição String nome = request.getParameter("nome"); Cookie c = new Cookie("usuario", nome); 2) Definir a duração do cookie em segundos c.setMaxAge(1000 * 24 * 3600 * 60); // 60 dias 3) Adicionar o cookie à resposta response.addCookie(c); Exemplo de leitura: 1) recuperar o cookie da requisição Cookie[] cookies = request.getCookies(); 2) Extrair cookie para um objeto local for (int i = 0; i < cookies.length; i++) { if (cookies[i].getName().equals("nome") { usuario = cookies[i].getValue(); } } * * API Cookie Retorna (get) ou modifica (set) valor contido no Cookie. Retorna o nome do Cookie. Retorna (get) ou modifica (set) o tempo de vida do Cookie em segundos, setMaxAge(-1) indica que o cookie é de sessão * * Sessões Como o HTTP não mantém estado de sessão, são as aplicações Web que precisam cuidar de mantê-lo quando necessário O objeto HttpSession pode manter o estado de conversação durante várias solicitações do mesmo cliente Podemos usá-lo para guardar tudo que recebemos do cliente em todas as solicitações que ele faz durante uma sessão O Container é o responsável por reconhecer que determinadas solicitações estão partindo de um mesmo cliente * * Sessões Como o Container reconhece as solicitações do mesmo cliente? Lembre-se que para o Container cada solicitação é de um NOVO cliente. * * Sessões Como o Container reconhece as solicitações do mesmo cliente? Cookie com ID * * Sessões Como o Container reconhece as solicitações do mesmo cliente? * * Sessões Sessões são representados por objetos HttpSession e são obtidas a partir de uma requisição Dois métodos podem ser usados HttpSession session = request.getSession(false); Se a sessão não existir, retorna null, caso contrário retorna sessão. HttpSession session = request.getSession(); Retorna a sessão ou cria uma nova. Mesmo que getSession(true) * * Interface HttpSession Esses nós já vimos em outros escopos. * * Interface HttpSession Retorna o identificador da sessão * * Interface HttpSession Retorna o momento em que a sessão foi criada pela primeira vez. * * Interface HttpSession Retorna a última vez que o Container recebeu uma solicitação com essa session ID. * * Interface HttpSession Retorna (get) ou modifica (set) o intervalo de tempo máximo (em segundos) que o Container permite a uma sessão ficar sem acesso por parte do cliente. Passado esse tempo a sessão é destruída. * * Interface HttpSession Finaliza a sessão. * * Interface HttpSession Retorna se a sessão foi criada na solicitação corrente. * * Formas de Destruir uma Sessão Não há como saber que cliente não precisa mais da sessão Algumas das formas de destruir uma sessão são: Chamando o método invalidate() Configurando o timeout Configurando o timeout da sessão no DD Configurar o timeout no DD tem quase o mesmo efeito de chamar o setMaxInactiveInterval() para cada sessão que é criada. Configurando o timeout para uma sessão específica. <web-app...> <session-timeout>tempo em minutos</session-timeout> </web-app> session.setMaxInactiveInterval(tempo em segundos); * * Sessão à prova de clientes Por padrão a sessão é implementada com cookies OK, mas e se o usuário bloquear os cookies no seu browser? Embora os browsers por default permitam o uso de cookies, o usuário pode configurar seu browser para não aceitá-los. Teremos que ficar dependentes da boa vontade do usuário? NÃO! Existe outra opção, mas teremos que trabalhar mais para implantá-la. * * Passando o ID da sessão pela URL O ID que identifica a sessão pode ser passado pela URL. Mas isso significa que todos os links de sua página devem codificar o ID Session, ou seja, todos os seus links devem ser criados dinamicamente. Cliente Servidor URL2 + ;jsessionid=1234567 URL2 + ;jsessionid=1234567 * * Passando o ID da sessão pela URL O método String encodeURL(String) da interface HttpServletResponse inclui numa URL o identificador da sessão. Se a sessão não existir ou o browser suportar cookies, o método não altera a URL. public void doGet(... response, ... response){ .... HttpSession session = request.getSession(); out.println(“<a href=\”” + response.encondeURL(“/BeerTest.do”) + “\”>click me</a>”); ... } * * Captura de Eventos de Sessões É preciso registrar o listener no web.xml * * Dúvidas * * Referências Aulas da disciplina de Java Web do Prof. Tarcísio Lucas
Compartilhar