PHP Sesións
Revisión del 22:10 8 dic 2016 de Wiki (discusión | contribuciones)
- Pódese empregar para pasar información 'importante' ou confidencial.
- Unha sesión 'dura' mentres un usuario está conectado a un sitio web.
- Empeza cando se conecta por primeira vez.
- Remata cando sae do sitio web ou leva un tempo de inactividade indicado pola directiva session.gc_maxlifetime no arquivo php.ini. Por defecto está establecido en 1440 segundos (24 minutos).
- Dentro da sesión dun usuario é posible crear variables que manterán o seu valor mentres o usuario teña a sesión activa, e poderemos obter ditos valores dende calquera páxina do sitio web.
- É importante sinalar que as variables de sesión SE GARDAN NO SERVIDOR a diferenza das cookies que se envían ao cliente e se gardan no seu computador.
- Cada vez que se inicia unha sesión, se crea un identificador único (ID) o cal pode ser pasado dunha páxina a outra pola URL ou por medio de cookies, se se ten habilitado o uso das mesmas.
- Por motivos de seguridade se recomenda pasar o ID a través de cookies e non da URL.
- Se se quere 'obrigar' ao usuario que utilice as cookies para pasar o ID se pode modificar o arquivo php.ini:
- session.use_only_cookies = 1
- Nota: Se estamos non aloxamento compartido, non teremos acceso ao arquivo php.ini, polo que poderemos crear un arquivo .htaccess no noso sitio web e engadir dita directiva ao mesmo.
- Para iniciar ou reanudar unha sesión necesitamos chamar á función session_start().
- É importante lembrar que debemos chamar a dita función sempre que fagamos uso de variables de sesión.
- Dita chamada ten que facerse ao principio da páxina php e antes de enviar nada ao explorador. Isto é debido a que o ID da sesión envíase como encabezado HTTP ao utilizar unha cookie.
- Unha vez chamada podemos crear / utilizar as variables de sesión da forma: $_SESSION['variable'] = "valor";
- Se queremos borrar os valores gardados nas variables de sesión:
- Podemos chamar á función unset($_SESSION['var');] dentro dunha páxina coa sesión iniciada.
- Por exemplo:
1 <?php 2 unset($_SESSION['nome']); 3 unset($_SESSION['id']); 4 ?>
- Podemos chamar á función session_destroy().
- Por exemplo:
1 <?php 2 session_start(); 3 ..... 4 session_destroy(); 5 ?>
- Nota: A sesión ten que estar iniciada antes de chamar a session_destroy().
- Atención: Esta función elimina os datos de sesión gardados no servidor pero non elimina a cookie (método por defecto) que identifica a sesión e que se garda no computador do cliente conectado. Dita cookie seguirá existindo ata que expire ou o cliente peche o navegador.
- Se queremos borrala teremos que executar o seguinte código:
1 <?php 2 session_start(); 3 ..... 4 session_destroy(); 5 setcookie(session_name(),'',0,'/'); 6 ?>
- Lembrar que $_SESSION é un array e polo tanto podemos percorrelo e borrar todos os elementos:
1 <?php 2 foreach(array_keys($_SESSION) as $k) unset($_SESSION[$k]) 3 ?>
- Tamén podemos chamar á función session_unset() coa sesión iniciada, que borra todas as variables de sesión da memoria.
1 <?php 2 session_start(); 3 ..... 4 session_unset(); 5 ?> 6 7 * Para ver a diferenza entre session_destroy() e session_unset recomendo ver [https://rg1024.wordpress.com/2016/02/18/session_unset-vs-session_destroy/ esta entrada dun blog]. 8 : Basicamente o que indica é que cando facemos un session_start() estamos cargando os datos gardados no disco do servidor no array global $_SESSION. 9 : Cando facemos un session_unset() estamos a borrar ese array, pero os datos seguen gardados no disco ata que remata de procesar a páxina, momento en que se pasan os datos do array (borrados) a disco, borrando os datos. 10 : Cando facemos un session_destroy() os datos gardados no disco do servidor son borrados, pero a copia local gardada na variable $_SESSION segue existindo na páxina que se está a procesar. 11 : A orde correcta para eliminar todas as variables de sesión e que deixen de ser válidas na páxina que se está a procesar sería: 12 :::<syntaxhighlight lang="php" line enclose="div" highlight="" > 13 <?php 14 session_start(); 15 ..... 16 session_unset(); 17 session_destroy(); 18 ?> 19 20 21 * Vexamos un exemplo: 22 23 * Arquivo '''UD4_session_Ex1_paxina1.php''': 24 ::<syntaxhighlight lang="java" line enclose="div" highlight="" > 25 <?php 26 session_start(); 27 ?> 28 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 29 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 30 31 <html> 32 <head> 33 <meta charset="UTF-8"> 34 <title></title> 35 </head> 36 <body> 37 <?php 38 $_SESSION['nome']='angel'; 39 40 ?> 41 <h1>Posto o valor da variable session 'nome' a Angel.</h1> 42 <h2>Pulsa <a href='UD4_session_Ex1_paxina2.php'> para ver o seu valor</a> noutra páxina...</h2>. 43 44 45 </body> 46 </html>
- Arquivo UD4_session_Ex1_paxina2.php:
1 <?php 2 session_start(); 3 ?> 4 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 5 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 6 7 <html> 8 <head> 9 <meta charset="UTF-8"> 10 <title></title> 11 </head> 12 <body> 13 <?php 14 printf("<h1>O valor da variable sesión é: %s</h1>",$_SESSION['nome']); 15 printf("<h2>O valor do ID de sesión é: %s</h2>", session_id()); 16 17 ?> 18 <h2>Pulsa <a href='UD4_session_Ex1_paxina3.php'> para borrar o seu valor</a>...</h2>. 19 20 </body> 21 </html>
- Arquivo UD4_session_Ex1_paxina3.php:
1 <?php 2 unset($_SESSION['nome']); 3 unset($_SESSION['id']); 4 // session_start(); 5 // session_destroy(); // Tamén se poden eliminar as variables de sesión desta forma. 6 7 ?> 8 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 9 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 10 11 <html> 12 <head> 13 <meta charset="UTF-8"> 14 <title></title> 15 </head> 16 <body> 17 <?php 18 printf("<h1>O valor da variable sesión é: %s</h1>",$_SESSION['nome']); 19 printf("<h2>O valor do ID de sesión é: %s</h2>", session_id()); 20 21 ?> 22 <h2>Pulsa <a href='UD4_session_Ex1_paxina1.php'> para volver a darlle un valor</a>...</h2>. 23 24 </body> 25 </html>
- Podemos comprobar como dende o servidor se envía unha cookie ao cliente para que se garde o identificador de sesión e así o servidor é capaz de identificar ao cliente.
- Valor de cookie que garda o identificador de sesión
Captura do plugin http-header na páxina UD4_session_Ex1_paxina2.php.
- Por iso é importante que cando un usuario decida saír dun programa no que estea autenticado, debe premer a opción saír, xa que un usuario podería obter o id da sesión gardada localmente, modificar a súa id cun plugin calquera e acceder á información de sesión gardada no servidor.
- O uso da URL para pasar o identificador de sesión (se non temos habilitado o uso de cookies) non é recomendable, xa que é visualmente accesible para calquera e se queremos compartir unha URL estariamos compartindo tamén o noso identificador de sesión.
- Tamén se recomenda limitar o tempo de vida dunha cookie. Este parámetro se pode configurar coa directiva session.cookie_lifetime tempo_en_segundos no que indicamos o tempo en segundos que vai ter validez a cookie enviada ao navegador. O valor por defecto é de 0, que significa que a cookie será válida ata que se pecha o navegador.
-- Ángel D. Fernández González -- (2016).