Diferencia entre revisiones de «PHP Paso de variables entre páxinas»

De MediaWiki
Ir a la navegación Ir a la búsqueda
(Utilizando sesións)
(Utilizando Cookies)
Línea 278: Línea 278:
  
 
== Utilizando Cookies ==
 
== Utilizando Cookies ==
 +
 +
* As [http://php.net/manual/es/features.cookies.php cookies] é información que se garda nos equipos dos usuarios dun sitio Web.
 +
 +
* O uso das cookies pode ser utilizada para gardar información sobre que 'páxinas' ou 'produtos' foron vistos por un usuario para, cando se volve ao mesmo sitio, que este poida ofrecer información 'personalizada'.
 +
 +
: Os seus detractores indican que pode ser un mecanismo para obter información sobre un usuario sen ser consciente do mesmo.
 +
  
 
: Para eliminar o ID da sesión, se estamos a utilizar cookies deberemos chamar á [http://php.net/manual/es/function.setcookie.php función setCookie].
 
: Para eliminar o ID da sesión, se estamos a utilizar cookies deberemos chamar á [http://php.net/manual/es/function.setcookie.php función setCookie].

Revisión del 22:27 9 oct 2016

A través da URL

  • Unha forma de pasar información de unha páxina a outra é a través dunha URL.
Os datos que aparecen despois do signo '?' son parámetros:?q=php&ie=utf-8&oe=utf-8
O formato que teñen este tipo de parámetros é: param1=valor&param2=valor&.....
  • Desvantaxes:
  • Calquera persoa pode ver os valores das variables polo que dito método non é moi seguro.
  • O usuario pode cambiar o valor de ditas variables polo que pode suceder que o sitio amose ou faga algo diferente do permitido.
  • O usuario pode obter información non actual se usa unha URL con datos non actualizados.
  • O tamaño do que podemos enviar na URL está limitado (depende de cada navegador, pero pode estar entre 2KB-8KB)
  • Vantaxes:
  • A través da URL podemos pasar datos dunha páxina a outra sen necesidade de ter un formulario por medio (o veremos no exemplo seguinte).


  • As variables que se pasan desta forma poden ser referenciadas en PHP a través da matriz global $_GET['param'].
Vexamos un exemplo de código:

Arquivo: UD2_paso_var_Ex1_eleccion_pelicula.php

 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 2     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 3 
 4 <html>
 5     <head>
 6         <meta charset="UTF-8">
 7         <title></title>
 8     </head>
 9     <body>
10         <?php
11         printf("Mandamos un nome de película fixo na url:<a href='UD2_paso_var_Ex1_datos_pelicula.php?pelicula=SUPERMAN'>PELICULA</a>");
12         ?>
13     </body>
14 </html>


Arquivo: UD2_paso_var_Ex1_datos_pelicula.php

 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 2     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 3 <html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es">
 4     <head>
 5         <meta charset="utf-8" />
 6         <title>Exemplos de códigos php</title>
 7     </head>
 8     <body>
 9 
10 <?php   
11 
12     printf("A película pasada como parámetro na URL é: <b>%s</b>",$_GET['pelicula']);
13 
14 
15 ?>
16     </body>    
17 </html>


  • Podedes comprobar como se modificades a url e poñedes outra valor, premendo a tecla 'enter' para que volva a cargar a páxina aparece o novo valor posto.

Pasando caracteres especiais na URL

  • O problema que podemos ter pasando valores desta forma, é que ditos valores teñan espazos en branco ou caracteres especiais.
  • Para poder pasar estes valores podemos facer uso da urlencode.
  • Para facer a función inversa: urldecode. Pero isto non é necesario no caso de asinar o valor a unha variable na segunda páxina.
Vexamos unha modificación do código anterior, pasando un nome de película con espazos:

Arquivo: UD2_paso_var_Ex1_eleccion_pelicula.php

 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 2     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 3 
 4 <html>
 5     <head>
 6         <meta charset="UTF-8">
 7         <title></title>
 8     </head>
 9     <body>
10         <?php
11         $pelicula=urlencode("E.T. El extraterrestre");
12         echo "Mandamos un nome de película fixo na url:"
13                 . "<a href='UD2_paso_var_Ex1_datos_pelicula.php?pelicula=$pelicula'>PELICULA</a>";
14         ?>
15     </body>
16 </html>


Arquivo: UD2_paso_var_Ex1_datos_pelicula.php

 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 2     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 3 <html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es">
 4     <head>
 5         <meta charset="utf-8" />
 6         <title>Exemplos de códigos php</title>
 7     </head>
 8     <body>
 9 
10     <?php   
11 
12         $pelicula=$_GET['pelicula'];
13         echo "A película pasada como parámetro na URL é: <b>$pelicula</b>";
14 
15     ?>
16     </body>    
17 </html>



  • Vexamos agora un exemplo de código de decodificación dunha cadea:
 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 2     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 3 <html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es">
 4     <head>
 5         <meta charset="utf-8" />
 6         <title>Exemplos de códigos php</title>
 7     </head>
 8     <body>
 9 
10     <?php   
11 
12         $cadeaCodificada="<br/>Espero + que + esto + se lea + ben";
13         echo $cadeaCodificada;
14         echo urldecode($cadeaCodificada);
15         
16     ?>
17     </body>    
18 </html>
  • Nota: Tamén é posible codificar a cadea utilizando a función rawurlencode.
Neste caso utiliza unha codificación segundo o estándar RFC3986. Os espazo en branco son codificados con %20, por exemplo.

Utilizando sesións

  • Pódese empregar para pasar información 'importante' ou confidencial.
  • Para facer un pouco máis 'interesantes' os exemplos utilizando variables de sesións, imos mirar previamente a sección de formularios
  • 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 dito valores dende calquera páxina do sitio web.


  • 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 se se ten habilitados o uso de cookies.
  • 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 de 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.
  • 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:
Por exemplo:
1 <?php
2     unset($_SESSION['nome']);
3     unset($_SESSION['id']);
4 ?>
Por exemplo:
1 <?php
2 session_destroy();
3 ?>


  • Vexamos un exemplo:
  • Arquivo UD2_paso_var_Ex2_paxina1.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     $_SESSION['nome']='angel';
15 
16 ?>
17         <h1>Posto o valor da variable session 'nome' a Angel.</h1>
18         <h2>Pulsa <a href='UD2_paso_var_Ex2_paxina2.php'> para ver o seu valor</a> noutra páxina...</h2>.
19         
20         
21     </body>
22 </html>


  • Arquivo UD2_paso_var_Ex2_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='UD2_paso_var_Ex2_paxina3.php'> para borrar o seu valor</a>...</h2>.
19         
20     </body>
21 </html>


  • Arquivo UD2_paso_var_Ex2_paxina3.php:
 1 <?php
 2     session_start();
 3     unset($_SESSION['nome']);
 4     session_destroy();
 5 
 6 ?>
 7 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 8     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 9 
10 <html>
11     <head>
12         <meta charset="UTF-8">
13         <title></title>
14     </head>
15     <body>
16 <?php
17     printf("<h1>O valor da variable sesión é: %s</h1>",$_SESSION['nome']);
18     printf("<h2>O valor do ID de sesión é: %s</h2>",  session_id());
19 
20 ?>
21      <h2>Pulsa <a href='UD2_paso_var_Ex2_paxina1.php'> para volver a darlle un valor</a>...</h2>.
22         
23     </body>
24 </html>


Utilizando Cookies

  • As cookies é información que se garda nos equipos dos usuarios dun sitio Web.
  • O uso das cookies pode ser utilizada para gardar información sobre que 'páxinas' ou 'produtos' foron vistos por un usuario para, cando se volve ao mesmo sitio, que este poida ofrecer información 'personalizada'.
Os seus detractores indican que pode ser un mecanismo para obter información sobre un usuario sen ser consciente do mesmo.


Para eliminar o ID da sesión, se estamos a utilizar cookies deberemos chamar á función setCookie.




-- Ángel D. Fernández González -- (2016).