programação server side i - aula 2

25
Programação Server Side I Aula 2 Cookies Prof. Elton R C Spode, MsC E-mail: [email protected] http://www.inf.unifra.br/~espode

Upload: antonio-passos

Post on 06-Jul-2015

1.406 views

Category:

Self Improvement


2 download

DESCRIPTION

Apresentação do prof. Elton Regis C. Spode em que aborda controle de sessão em aplicativos web

TRANSCRIPT

Page 1: 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

Page 2: Programação Server Side I - Aula 2

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

Page 3: Programação Server Side I - Aula 2

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

Page 4: Programação Server Side I - Aula 2

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

Page 5: Programação Server Side I - Aula 2

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.

Page 6: Programação Server Side I - Aula 2

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

Page 7: Programação Server Side I - Aula 2

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

Page 8: Programação Server Side I - Aula 2

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.

Page 9: Programação Server Side I - Aula 2

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

Page 10: Programação Server Side I - Aula 2

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

Page 11: Programação Server Side I - Aula 2

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)

Page 12: Programação Server Side I - Aula 2

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

Page 13: Programação Server Side I - Aula 2

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

Page 14: Programação Server Side I - Aula 2

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

Page 15: Programação Server Side I - Aula 2

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

Page 16: Programação Server Side I - Aula 2

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

Page 17: Programação Server Side I - Aula 2

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

Page 18: Programação Server Side I - Aula 2

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

Page 19: Programação Server Side I - Aula 2

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

Page 20: Programação Server Side I - Aula 2

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

Page 21: Programação Server Side I - Aula 2

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

Page 22: Programação Server Side I - Aula 2

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

Page 23: Programação Server Side I - Aula 2

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

Page 24: Programação Server Side I - Aula 2

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

Page 25: Programação Server Side I - Aula 2

Exercício

• Completar o sistema: Cada opção chamada do menu deverá operar sobre a conta corrente atual.