Programação Server Side I - Aula 2
-
Upload
antonio-passos -
Category
Self Improvement
-
view
1.406 -
download
2
description
Transcript of Programação Server Side I - Aula 2
Programação Server Side I
Aula 2
Cookies
Prof. Elton R C Spode, MsC
E-mail: [email protected]
http://www.inf.unifra.br/~espode
Cookies
• São pequenas seqüências de bits armazenadas no cliente pelo browser
• Surgiram no Netscape para guardar informações persistentes no cliente
• Existem restrições para o seu uso:• Existem restrições para o seu uso:
– Podem ser acessados apenas pelo domínio que os criou
– Podem ser desabilitados pelo usuário (privacidade)
• Cookies são enviados de volta sempre que o usuário retorna ao domínio que gravou-os
Aplicações de Cookies
• Os usos mais comuns de cookies são:
– Identificação de usuários durante uma sessão de comércio eletrônico
– Diminuir a necessidade de solicitação de senhas para o usuárioo usuário
– Customização de sites de acordo com as preferências de cada visitante
– Propaganda dirigida
• Como cookies são gravados como arquivos texto eles não representam ameaça à segurança do usuário, apenas à sua privacidade
Criação de Cookies
• Para criar um cookie:
– Criar um objeto da classe Cookie passando o nome do cookie e seu valor
– Indicar o tempo de validade do cookie (em segundos) com o método setMaxAge. Se não for indicado com o método setMaxAge. Se não for indicado nenhum, o cookie é valido até que o browser seja fechado
– Enviar o cookie para o cliente usando o método addCookie do objeto response
• Mesmo que sejam criados vários cookies, todos eles serão gravados em apenas um arquivo
Criação de Cookies (cont.)
• O nome do cookie não pode conter os seguintes caracteres: [ ] ( ) = , “ / ? @ : ;
• O conteúdo do cookie não pode conter o ;
• Criando um cookie com a duração de 1 hora:Cookie cookie = new Cookie(“nome”, “João”);Cookie cookie = new Cookie(“nome”, “João”);
cookie.setMaxAge(60*60);
response.addCookie(cookie);
• Se o cookie não existir, será criado. Caso contrário será alterado.
• Também podem ser criados cookies inserindo-se as Headers adequadas no objeto response.
Leitura de Cookies
• Todos os cookies referentes ao domínio que está sendo solicitado são automaticamente enviados juntos com a requisição
• Eles estão disponíveis no objeto request e podem ser recuperados com getCookiespodem ser recuperados com getCookies
• Este método retorna um array de cookies
• Para recuperar um cookie específico é necessário fazer a varredura do arraycomparando o nome procurado com cookie.getName
Cookies API
• A API de cookies possui métodos para assinalar e pegar atributos disponíveis no cookie:
• set/getComment • set/getDomain• set/getMaxAge• set/getMaxAge• set/getName• set/getPath• set/getSecure• set/getValue• set/getVersion
Cookies API (cont.)
• Alguns métodos são de interesse especial:
• setDomain - altera o domínio do cookie mas não pode ser usado livremente, apenas em situações bem específicas.
• setPath -altera o path para o qual o cookie se • setPath -altera o path para o qual o cookie se aplica. Em geral é utilizado na forma:cookie.setPath(“/”);
• Este comando indica que todas as páginas neste servidor devem receber o cookie de volta.
Exercício
• Alterar o servlet LoginServlet para gravar o id do usuário em um cookie. Caso o cookie já exista não solicitar a senha, apenas redirecionar para o CadastroServlet
Sessão
• O protocolo HTTP é “stateless”, ou seja, ele não mantém informações entre conexões
• Após a resposta ser enviada a uma requisição, a conexão é fechada
• Entretanto, é comum o envio de requisições • Entretanto, é comum o envio de requisições interligadas por um mesmo cliente, como operações de conta corrente ou compras
• Este conjunto de requisições e respostas é chamado de sessão
Rastreamento de Sessões
• Para atingir o objetivo de ligar conexões é necessário rastrear cada sessão, ou seja, verificar a qual usuário pertence cada requisição
• Este método de rastreamento consiste em:
– Associar cada requisição recebida com uma sessão – Associar cada requisição recebida com uma sessão específica
– Se for uma nova sessão, gerar um identificador único para ela
– Recuperar dados da sessão (produtos comprados por exemplo) de um conjunto (lista, tabela hash, etc)
Rastreamento de Sessões
• Este controle pode ser feito “manualmente” através do uso de cookies.
• Como o usuário pode desabilitar os cookies em sua máquina, os processos alternativos são: uso de campos escondidos em formulários HTML ou de campos escondidos em formulários HTML ou através de reescrita de URLs
• Entretanto, como este é um processo comum e trabalhoso, existe uma API que realiza todo o tratamento de maneira simples e transparente para o programador: HttpSession
Campos Escondidos
• Consiste na inserção do id único do usuário em cada página gerada através do uso de campos escondidos:<input type=“hidden” name=“id” value= “...”>
• O id é então recuperado através do getParameter
• Este método apresenta duas desvantagens:• Este método apresenta duas desvantagens:
– Só funciona para páginas geradas dinamicamente pois o id deve ser inserido no HTML
– É obrigatório o uso de forms com botões, não sendo possível o uso de links para páginas que façam parte da sessão
Reescrita de URLs
• Neste método, o id da sessão de cada usuário é adicionado ao fim de toda URL:http://www.xyz.com;id=563248712354
• Para recuperá-lo, também utiliza-se método getParametergetParameter
• Funciona em qualquer browser, mesmo se o usuário desabilitar os cookies
• Entretanto se o usuário acessar a mesma página através de um outro link ou bookmark, a sessão será perdida
Cookies
• Para cada nova requisição, um cookie com o id da sessão é gravado no browser do cliente
• O id é recuperado através do cookie
• Se puder ser usada, é a melhor solução pois funciona em todos os casos.todos os casos.
• Como desvantagem, temos a tarefa relativamente trabalhosa de:
– Extrair o cookie de id do array
– Assinalar um tempo de validade adequado
– Associar cada requisição com uma sessão
– Gerar os ids únicos
HttpSession API
• Para simplificar o rastreamento de sessões utilizamos a interface HttpSession que realiza as seguintes tarefas de maneira transparente:
– Gera ids únicos
– Mantém informações de todas as sessões atuais– Mantém informações de todas as sessões atuais
– Associa requisições com suas respectivas sessões
– Utiliza o método de rastreamento disponível para cada usuário: cookies se estiverem habilitados ou reescrita de URLs
– Possibilita o armazenamento de objetos na sessão
– Descarta sessões completas ou abandonadas
Criando e Recuperando
Sessões• Para recuperar uma sessão utiliza-se o método getSession do objeto request:HttpSession session = request.getSession();
• Se não existir sessão o método retorna null• Para criar uma sessão deve-se usar:• Para criar uma sessão deve-se usar:
HttpSession session = request.getSession(boolean criar);
• Se o parâmetro for true uma sessão será criada caso não exista, se for false o método retornará null como no caso anterior
• Para verificar se ela é nova usa-se isNew()
Inserindo um Atributo
• Para inserir atributos deve-se usar os métodos setAttribute (2.2) e putValue de HttpSession
• Sintaxe:void putValue(String nome, Object Valor);Valor);
• Objetos inseridos com este método estarão disponíveis até que a sessão do usuário correspondente termine
• Como cada usuário terá sua própria sessão, esta é uma excelente maneira de armazenar e organizar os dados de cada um
Recuperando Atributos
• Para recuperar atributos da sessão, usa-se getAttribute (2.2) e getValue de HttpSession
• Sintaxe:Object getValue(String nome);
• Se o atributo não existir, será retornado null• Se o atributo não existir, será retornado null
• Para se recuperar todos os atributos associados com uma sessão, usa-se getAttributeNames(2.2) ou getValueNames
• Sintaxe:Enumeration getAttributeNames();
String [] getValueNames();
Descartando Sessões
• Quando o usuário terminar sua sessão, deve-se eliminá-la usando o método invalidate()
• Sintaxe:void invalidate();
• Este método finaliza a sessão e retira a ligação • Este método finaliza a sessão e retira a ligação de todos os objetos anteriormente associados
• Repare que ele não libera os objetos associados, apenas elimina suas ligações
Outros Métodos
• removeAtribute - elimina o atributo da sessão• getId - recupera o ID único gerado• getCreationTime - recupera a hora de criação da sessão em milisegundos
• getLastAccessedTime - recupera o último acesso • getLastAccessedTime - recupera o último acesso a esta sessão em milisegundos
• setMaxInactiveInterval - altera o tempo de inatividade em que uma sessão será invalidada
• getMaxInactiveInterval - recupera o tempo de inatividade
Codificação de URLs
• O HttpSession escolherá o método de reescrita de URLs caso não possa usar cookies
• Neste caso, o id da sessão será adicionado a toda URL requisitada
• Nas respostas enviadas pelos servlets é comum • Nas respostas enviadas pelos servlets é comum a inserção de URLs em links, ações de formulários ou em redirecionamentos
• Para o correto funcionamento da sessão é necessária a inserção do id nestas URLs
• Usam-se os métodos do objeto response: encondeURL e encodeRedirectURL
URLs em Links
• Para codificar URLs do próprio site que serão colocadas em links ou em ações de formulários utiliza-se o método encodeURL
• Sintaxe:String encodeURL(String URL);String encodeURL(String URL);
• Exemplo:String novaURL = response.encodeURL(URL);
out.println(“<a href=” + novaURL + ”>Clique
aqui </a>);
URLs em sendRedirect
• Para os casos em que a requisição deva ser redirecionada para outra URL no mesmo site usa-se encodeRedirectURL
• Sintaxe:String encodeRedirectURL(String String encodeRedirectURL(String
URL);
• Exemplo:String URL =
response.encodeRedirectURL(URL);
response.sendRedirect(novaURL);
Exercício
• Completar o sistema: Cada opção chamada do menu deverá operar sobre a conta corrente atual.