Programação para a Internet II 2.9. PHP Cookies e variáveis de sessão Nuno Miguel Gil Fonseca nuno.fonseca@estgoh.ipc.pt
Cookies Uma cookie mais não é do que um ficheiro que é criado por determinado site no disco dos clientes e que permite guardar alguma informação sobre este Login, Número de vezes que acedeu ao site, etc. Permitem guardar muito pouca informação (algumas dezenas de kb) As cookies podem ou não ter associada uma data de expiração! É possível guardar a informação encriptada (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para a Internet II 2
Cookies Só o site que criou a cookie a pode abrir para leitura/escrita. As têm a sua utilidade, no entanto, os browsers oferecem a opção de bloquear as cookies, pelo que operações importantes não se devem basear exclusivamente no seu uso. <?php if (!isset($_cookie["nome_da_variavel"])) { setcookie("nome_da_variavel", valor[, data_de_expiração]); }?> (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para a Internet II 3
Cookies (cont.) Caso queiramos que a cookie só seja valida enquanto o browser estiver aberto, faz-se: <?php setcookie("nome_da_variavel", valor);?> Caso queiramos que a cookie tenha um determinado prazo de validade faz-se: <?php setcookie("nome_da_variavel", valor, time() + $x );?> Caso queiramos desactivar uma cookie, faz-se: <?php setcookie("nome_da_variavel", valor, time() - $x );?> (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para a Internet II 4
Variáveis de sessão Uma variável de sessão pode ser encarada como uma mistura de cookie do lado do servidor e uma cookie do lado do cliente, que apenas contêm uma referência para a primeira A cookie do cliente guarda o identificador da sessão (session id), que segue juntamente com qualquer pedido feito ao servidor Permitem guardar muito mais informação do que uma vulgar cookie (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para a Internet II 5
São muito mais seguras! Como tal, são usadas largamente em sistemas de autenticação/ autorização/ controlo de acesso a recursos. Não deverão ser usadas em sistemas com múltiplos computadores. (em alternativa, poderão ser usadas bases de dados, ou sistemas de ficheiros centralizados) (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para a Internet II 6
Todas as variáveis de sessão estão acessíveis através da variável superglobal $_SESSION Expiram: ao fim de um determinado período de tempo definido na configuração do web server; quando se fecha o browser; Ou quando são terminadas explicitamente por ordem do utilizador. (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para a Internet II 7
Iniciar a sessão É sempre necessário iniciar a sessão, isto é, para fazer a linkagem entre a cookie do cliente e a cookie do servidor <?php session_start();?> Este pedaço de código deverá ser sempre o primeiro a surgir num ficheiro em que sejam usadas variáveis de sessão!!! Criar variáveis de sessão <?php $_SESSION["variavel"] = $val; $_SESSION["primeiro_nome"] = "Nuno";?> (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para a Internet II 8
Aceder a variáveis de sessão <?php $_SESSION["nome"] = "ze"; print($_session["nome"]);?> Remover variáveis de sessão <?php unset($_session["nome"]);?> (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para a Internet II 9
Terminar sessão Foram enunciadas anteriormente, algumas das formas de terminar a sessão, no entanto, podemos querer terminar uma sessão manualmente, num mecanismo de logout, por exemplo. <?php session_start(); $_SESSION = array(); session_destroy();?> (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para a Internet II 10
Como foi dito anteriormente, a utilização de variáveis de sessão está dependente do uso de cookies. Então e se o utilizador desactivar as cookies no seu browser? Terá que passar manualmente o session id no endereço do pedido http://localhost/teste.php?phpsessid=be20081806199800da22e24081964000 (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para a Internet II 11
Para tal ser possível, há que verificar no ficheiro php.ini se a opção session.use_cookies tem valor diferente de 0. Para incluir o session id no endereço poderá fazer: ou <?php session_start( ); $url = "/xpto.php?phpsessid=". session_id( );?> <a href="<?=$orderurl?>">create Order</a> <?php session_start( );?> <a href="/order.php?<?=sid?>">create Order</a> (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para a Internet II 12