Aula 8 Cookies Sessoes

49
PHP: Cookies e Sessões

description

Aula 8 Cookies Sessoes

Transcript of Aula 8 Cookies Sessoes

  • PHP: Cookies e Sesses

  • http://marx.vanderlinden.com.br/ 2

    O protocolo HTTP no tem conceito de sesses.

    Modelo simples de Requisio e Resposta.

    Protocolo HTTP

  • 3 Tipicamente, vrios usurios esto acessando o servidor web ao mesmo tempo.

    HTTP no define uma maneira direta de se rastrear cada usurio e dar continuidade individual s atividades de requisies anteriores.

    Protocolo HTTP

  • 4Cookies

    Um Cookie um arquivo de texto que pode ser criado pelo navegador, a pedido do servidor web.

    Cada cookie tem um conjunto de variveis: nome=valor

    Todo cookie necessariamente associado ao um site (ou domnio) que o criou e, teoricamente, no pode ser acessado por outros sites.

  • 5Cookies

    O cookie reenviado automaticamente ao servidor a cada nova visita mesma pgina.

    Um cookie pode conter uma data de expirao (opcional) Default: Cookie apagado ao se fechar o

    navegador.

  • 6Cookies

  • 7Cookies

  • 8Cookies

  • 9 Armazenar itens no "carrinho de compras". Armazenar informaes de autenticao. Guardar configuraes do usurio. Permitir continuidade no uso de uma aplicao

    web.

    Usos de Cookies

  • 10

    setcookie

    Para incluir na resposta HTTP uma solicitao para que o navegador crie um cookie, basta utilizar a funo setcookie.

    Sintaxe (simplificada): setcookie($nome, $valor) Returna true em caso de sucesso, false em

    caso de erro.

  • 11

    setcookie

    Deve ser usado antes de enviar qualquer dado pertencente ao corpo da mensagem! (inclusive espaos em branco).

    No h garantias de que o navegador vai aceitar o cookie.

  • http://marx.vanderlinden.com.br/ 12

    pagina1.php

    Cookies, pgina 1

  • 15

    Sada

    Cookies, pgina 1

    Cookie enviado com sucesso

  • 16

    $_COOKIE

    O interpretador PHP automaticamente organiza os cookies enviados pelo usurio ao servidor, atravs do array $_COOKIE.

    Formato: $_COOKIE[$nome] // retorna $valor

  • 17

    pagina2.php

    Cookies, pgina 2

  • 20

    Sada

    Cookies, pgina 2

    Seu nome Fabrica de Software Houten.

  • 21

    Para armazenar no cliente um cookie que ser lido como um array, basta utilizar a notao de arrays.

    setcookie("valor[nome]", "Bill");setcookie("valor[sobrenome]", "Gates");setcookie("valor[empresa]", "Microsoft");

    Cookies como arrays

  • 22

    Depois, possvel usar o resultado do cookie recebido de volta como um array comum.

    if (isset($_COOKIE['valor'])) { foreach ( $_COOKIE['valor'] as $indice => $valor ) echo "$indice: $valor \n";}

    nome: Bill sobrenome: Gates empresa: Microsoft

    Cookies como arrays

  • 23

    Para evitar que o cookie seja excludo quando o navegador for fechado, necessrio especificar um tempo de expirao.

    Sintaxe completa: setcookie($nome, $valor, [$dataexpira], [$caminho], [$domnio])

    Se $dataexpira no for especificado ou igual a 0, ser excludo quando se fechar o navegador

    Tempo de expirao

  • http://marx.vanderlinden.com.br/ 24

    Cookie que expira em 1 hora:

    Cookie que expira em 1 dia:

    Cookie que expira do dia 12 de outubro de 2010

    setcookie('login','milhouse', time() + 60*60 );

    setcookie('login','krusty', time() + 60*60*24 );

    setcookie('login','flanders', mktime(12,0,0, 10,12,2010) );

    Tempo de expirao

  • 25

    O terceiro parmetro de setcookie serve para especificar a partir de que diretrio, na estrutura de arquivos do servidor web, o cookie deve ser aplicado. Padro: apenas diretrio atual '/' Domnio inteiro

    Diretrio de aplicao do Cookie

  • 26

    Cookie vlido para todo o domnio

    www.exemplo.com www.exemplo.com/dir1/springfield

    Cookie vlido para um diretrio

    www.exemplo.com/moe www.exemplo.com/moe/tavern

    setcookie('login','burns', 0, '/' );

    setcookie('login','barney', time()+60*60, '/moe' );

    Diretrio de aplicao do Cookie

  • 27

    Por padro os cookies s so enviados para sites que tenham exatamente o mesmo domnio (incluindo subdomnio) www.exemplo.com meusite.exemplo.com

    O quarto parmetro indica para que partes do domnio da URL o cookie dever ser enviado. No possvel especificar um domnio diferente

    daquele do site que registra o cookie!

    Domnio de aplicao do Cookie

  • 28

    Cookie vlido para todo o domnio

    www.exemplo.com www.exemplo.com/dir1/springfield meusite.exemplo.com/shelbyville

    setcookie('login','burns', 0, '/', '.exemplo.com' );

    Domnio de aplicao do Cookie

  • 29

    Para excluir um cookie, basta passar um novo cookie com exatamente os mesmos parmetros j passados, mas valor igual string vazia.

    Criando:

    Excluindo:

    setcookie('login','burns', 0, '/' );

    setcookie('login','', 0, '/' );

    Excluindo um cookie

  • 30

    Todas as informaes ficam armazenadas no cliente. O servidor no tem um controle preciso de

    que cookies esto armazenados para cada usurio.

    Todas os dados precisam ser repassados novamente a cada requisio HTTP feita pelo cliente.

    Cookies podem ser desativados, excludos e modificados pelo cliente.

    Caractersticas dos Cookies

  • 31

    Sesses

    PHP fornece um mecanismo de sesses. Quase todos os dados ficam armazenados no

    servidor.

  • 32

    Sesses

    Quando a sesso inicia, o servidor gera um ID, que uma string alfanumrica aleatria nica (PHPSESSID) para identificar o cliente.

    O cliente armazena a ID como um cookie. Em todas as requisies seguintes, o cliente

    envia ao servidor apenas o cookie referente ao seu ID.

    A partir dos IDs, o servidor identifica e diferencia cada cliente.

  • 33

    Para iniciar (ou continuar) uma sesso, basta usar a funo session_start

    Sintaxe: session_start()

    Deve ser usado antes de qualquer sada do corpo da mensagem

    Sempre returna true

    session_start()

  • 34

    $_SESSION

    Para ler e configurar variveis de sesses, utiliza-se o array $_SESSION. No h anlogo em sesses funo setcookie.

  • http://marx.vanderlinden.com.br/ 35

    exemplo.php

    Sesses

    Esta a sua visita nmero .

  • 40

    possvel configurar os parmetros do cookie usado para armazenar o ID da sesso.

    Sintaxe: session_set_cookie_params( $dataexpira, [$caminho], [$domnio]) A sintaxe dos parmetros similar s da

    funo setcookie.

    session_set_cookie_params

  • 41

    session_name

    A funo session_name muda o nome do cookie que identifica o cdigo da sesso.

    Deve ser chamado antes de session_start. Sintaxe: session_name($novonome)

    Return true em caso de sucesso; false em erro.

  • 42

    session_id

    Sintaxe: session_id()

    Retorna o ID da seo atual, ou '', caso no haja sesso aberta.

  • 43

    session_regenerate_id

    Sintaxe: session_regenerate_id()

    Gera um novo ID para a sesso atual. Envia uma novo requisio de Cookie ao cliente,

    sem quebrar a sesso. Precisa ser chamado antes de qualquer sada no

    corpo da resposta HTTP. Return true em caso de sucesso; false

    em erro.

  • 44

    Por padro: Uma sesso continua ativa caso seja

    acessada pelo usurio ao menos 1 vez a cada 24 minutos.

    Sesses no servem para armazenar dados permanentes!

    Cada vez que session_start chamada, h uma probabilidade de 1% de que o PHP vai varrer todas as sesses ativas, e excluir as que expiraram.

    Configurando sesses

  • 45

    ini_set

    A funo ini_set serve para mudar temporariamente alguma configurao do PHP.

    Sintaxe: ini_set($varivel, $novovalor)

    Return true em caso de sucesso; false em erro.

  • 46

    Especifica o tempo (em segundos) mximo que uma sesso deve durar, esperando pelo usurio. Padro: 1440 (24 minutos). Deve ser modificada antes de session_start()

    ini_set('session.gc_maxlifetime', 600);session_start( );

    session.gc_maxlifetime

  • 47

    Especifica a probabilidade (em %) de que o PHP vai fazer a verificao e limpeza das sesses expiradas, a cada chamada de session_start. Padro: 1 Tambm deve ser modificada antes de session_start

    ini_set('session.gc_probability', 100);session_start( );

    session.gc_probability

  • 48

    Segurana

    Problema de segurana: A ID da sesso pode ser interceptada por

    algum que esteja monitorando a rede. Se outra pessoa usar a mesma ID para fazer

    requisies ao servidor, pode fazer se passar por outro usurio.

  • 49

    Funes de Hash

  • 50

    Funes de Hash

    PHP implementa as funes de hash mais comuns: md5($string) sha1($string) hash($algoritmo, $string)

    (Funo genrica que implementa vrios algoritmos)

  • 51

    md5

    echo md5("The book is on the table"), " \n";echo md5("The book is on the table."), " \n";0c29bf0f928decfbf91070fa4affb0c4 1f683fe1cd7977cdd056ddc25d6bd8f8

  • 52

    $_SERVER

    O array $_SERVER contm informaes fornecidas pelo servidor web, como cabealhos, caminhos de arquivo e configuraes.

    Os ndices do array so fixos e seus valores no podem ser modificados.

  • 53

    $_SERVER

    Exemplos: 'PHP_SELF' Nome do script atual 'SERVER_ADDR' Endereo IP do servidor 'SERVER_NAME' Nome do servidor 'HTTP_USER_AGENT' Configuraes do cliente 'REMOTE_ADDR' Endereo IP do cliente

  • http://marx.vanderlinden.com.br/ 54

    $_SERVER$keys = array(

    'PHP_SELF', 'SERVER_ADDR','SERVER_NAME', 'HTTP_USER_AGENT','REMOTE_ADDR',

    );foreach($keys as $k)

    echo "$k: $_SERVER[$k]\n";PHP_SELF: /exemplo/exemplo.phpSERVER_ADDR: 127.0.0.1SERVER_NAME: localhostHTTP_USER_AGENT: Mozilla/5.0 (X11; U; Linux i686; pt-BR; rv:1.9.0.1) Gecko/2008072820 Firefox/3.0.1REMOTE_ADDR: 127.0.0.1

  • http://marx.vanderlinden.com.br/ 55

    Sesso Segura (1/2)

  • 56

    Sesso Segura

    Sesses

  • 57

    Sada Primeira execuo:

    Execues seguintes:

    Tentativa de ataque:

    OK!Continuando sesso

    Continuando sesso

    Erro! Por favor, faa o login novamente.

    Slide 1Slide 2Slide 3Slide 4Slide 5Slide 6Slide 7Slide 8Slide 9Slide 10Slide 11Slide 12Slide 13Slide 14Slide 15Slide 16Slide 17Slide 18Slide 19Slide 20Slide 21Slide 22Slide 23Slide 24Slide 25Slide 26Slide 27Slide 28Slide 29Slide 30Slide 31Slide 32Slide 33Slide 34Slide 35Slide 36Slide 37Slide 38Slide 39Slide 40Slide 41Slide 42Slide 43Slide 44Slide 45Slide 46Slide 47Slide 48Slide 49Slide 50Slide 51Slide 52Slide 53Slide 54Slide 55Slide 56Slide 57