Diferencia entre revisiones de «PHP Sesións»
Ir a la navegación
Ir a la búsqueda
| Línea 73: | Línea 73: | ||
session_unset(); | session_unset(); | ||
?> | ?> | ||
| + | </syntaxhighlight> | ||
* 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]. | * 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]. | ||
Revisión del 08:58 10 dic 2016
- 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 ?>
- Para ver a diferenza entre session_destroy() e session_unset recomendo ver esta entrada dun blog.
- Basicamente o que indica é que cando facemos un session_start() estamos cargando os datos gardados no disco do servidor no array global $_SESSION.
- 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.
- 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.
- 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:
1 <?php 2 session_start(); 3 ..... 4 session_unset(); 5 session_destroy(); 6 ?> 7 8 9 * Vexamos un exemplo: 10 11 * Arquivo '''UD4_session_Ex1_paxina1.php''': 12 ::<syntaxhighlight lang="java" line enclose="div" highlight="" > 13 <?php 14 session_start(); 15 ?> 16 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 17 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 18 19 <html> 20 <head> 21 <meta charset="UTF-8"> 22 <title></title> 23 </head> 24 <body> 25 <?php 26 $_SESSION['nome']='angel'; 27 28 ?> 29 <h1>Posto o valor da variable session 'nome' a Angel.</h1> 30 <h2>Pulsa <a href='UD4_session_Ex1_paxina2.php'> para ver o seu valor</a> noutra páxina...</h2>. 31 32 33 </body> 34 </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 session_start(); 3 unset($_SESSION['nome']); 4 unset($_SESSION['id']); 5 // session_destroy(); // Tamén se poden eliminar as variables de sesión desta forma, pero se non facemos as liñas anteriores, dentro do código desta páxina $_SESSION['nome'] seguiría tendo un valor. 6 7 8 // Lembrar que o session_id segue estando gardado como cookie no cliente. 9 // Se queredes borrala teredes que poñer: setcookie(session_name(),'',0,'/'); 10 11 ?> 12 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 13 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 14 15 <html> 16 <head> 17 <meta charset="UTF-8"> 18 <title></title> 19 </head> 20 <body> 21 <?php 22 printf("<h1>O valor da variable sesión é: %s</h1>",$_SESSION['nome']); 23 printf("<h2>O valor do ID de sesión é: %s</h2>", session_id()); 24 25 ?> 26 <h2>Pulsa <a href='UD4_session_Ex1_paxina1.php'> para volver a darlle un valor</a>...</h2>. 27 28 </body> 29 </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).