Como usar la variable $_SESSION en PHP

La variable $_SESSION es una Superglobal en PHP, por tanto está disponible en cualquier parte de los scripts sin la necesidad de usar un global de llamada. está variable es muy similar a un $_COOKIE pero la diferencia es que se graba en el servidor y dura hasta que el navegador sea cerrado (no la pestaña de visualización, hablo de cerrar el navegador completo).

Esto es útil por ejemplo para carritos de compra, guardar cierta configuración solo para esa visita en especial, etc.

Si en alguna parte de un script (pagina1.php) guardamos un valor usando esa variable

$_SESSION['nickname']="Jhonnyf";

Esta variable estará disponible en cualquier otro script (pagina2.php, test.php, cualquierpagina.php) mientras el navegador NO SEA CERRADO se podrá tener acceso a los datos grabados ahí.

Como usarlo:

Lo primero es llamar a la función que Inicia/Continua la sesión y desde ahí ya puedes comenzar a grabar

session_start();
$_SESSION['nickname']  = 'Jhonnyf';

Luego de eso, en otro script debes volver a llamar a la función session_start(); y usar la variable previamente grabada.

Por ejemplo vamos a grabar un Nickname en un script y luego usarlo en otros 2 scripts

pagina1.php

<?php
session_start(); //Iniciamos o Continuamos la sesión
if (isset($_POST['txtusuario'])) //Si llego un Nickname vía el formulario lo grabamos en la sesión
{
	$_SESSION['nickname'] = $_POST['txtusuario']; //Nickname Grabado
}
if ($_SESSION['nickname']) //Si hay un nickname en la sesión actual, creamos una variable que será mostrada
{
	$grabado="El valor Grabado Previamente es: <strong>".$_SESSION['nickname']."</strong><br />
	<a href='pagina2.php'>pagina2.php</a>";
}
?>

<html>
<head>
</head>
<body>
<?php echo ($grabado); //El mensaje si hay nickname?>
<form action="" method="post">
Escribe tu Nickname: 
<input type="text" size="25" name="txtusuario" value="<?php echo $_SESSION['nickname'];?>"/>
<br />
<input type="submit" value="Grabar" />
</form>
</body>
</html>

pagina2.php

<?php
session_start(); //Iniciamos la sesión o la Continuamos
if ($_SESSION['nickname'])
{
	$grabado="El valor Grabado en <a href='pagina1.php'>pagina1.php</a> fue: <strong>".$_SESSION['nickname']."</strong><br />"; //Si existe un nickname generamos el mensaje
}
else
{
	$grabado="No has grabado ningún Nickname visita la <a href='pagina1.php'>pagina1.php</a>"; //Mensaje que no existe nada Grabado
}
?>

<html>
<head>
</head>
<body>
<?php echo ($grabado); ?>
</body>

Puedes verlo en funcionamiento en los siguientes enlaces:

http://www.elcodigofuente.com/ejemplos/pagina1.php
http://www.elcodigofuente.com/ejemplos/pagina2.php

Si entras primero en la pagina2.php no veras nada grabado ya que es la pagina1.php donde se graban los datos, y solo se eliminan los datos cuando cierras el navegador web.

Aquí los archivos para descargar:

Archivos adjuntos

21 Comentarios para “Como usar la variable $_SESSION en PHP”

  1. U wont beleive how hard has been to find this solution. Many thnx

  2. BTW, you need to change:
    if ($_POST[‘txtusuario’])

    with

    if (isset($_POST[‘txtusuario’]))

    Thnx again

    1. yes, you’re right!

      thank you

  3. Excelente tutorial, me gusto mucho y me ha salvado, lo recomiendo mucho (Y). Gracias

  4. hola amigo:
    estoy aprendiendo PHP, ya tengo un carrito de la compra y me guarda todos mis datos bien con una variable de session;
    como se puede hacer para que, una vez utilizado esa variable de session, se vacie todo el contenido para nuevas compras, ya que al regresar al carrito me vuelve a mostrar lo que existe en la variable de session

    Podrías ayudarme?
    Gracias

    1. simplemente luego de usar el carrito, destruye las variables que contiene la información con un unset,

      unset($session[‘carrito’])

      eso si, te recomiendo que todo el carrito sera un array en session y no usar todo session como si fuera un carrito, es decir, dentro de $session[‘carrito’] hacer mas array para toda la informacion referente.

    2. Para hacer lo del carrito hay que crear una clase y usar serialize y unserialize para trasladar los valores cargados en el objeto de página en página… la clase sería algo así:

      class Carrito{
      //propiedades
      private $nPro; /*número de productos de la compra se entiende como el indice de los arreglos*/
      private $array_id_pro;
      private $array_nombre_pro;
      private $array_precio_pro;
      private $array_cant_pro;

      //métodos
      public function Carrito(){
      $this->num_productos=0;
      //echo «Carrito Instanciado»;

      }

      public function infoCarrito(){
      return ‘Hi I\’m the car’;
      }

      public function getnPro(){
      return $this->nPro;
      }

      //Introducir Producto
      public function putProducto($idpro,$nombrepro,$preciopro,$cantpro){
      $this->array_id_pro[$this->nPro]=$idpro;
      $this->array_nombre_pro[$this->nPro]=$nombrepro;
      $this->array_precio_pro[$this->nPro]=$preciopro;
      $this->array_cant_pro[$this->nPro]=$cantpro;

      //Luego de meter el producto incrementamos el índice del número de producto

      $this->nPro++;
      }
      public function borrarProducto($indicePro){
      $this->array_id_pro[$indicePro]=0; //pone el valor del codigo del producto en cero
      }
      public function showProductos(){
      $suma = 0;
      echo ‘

      Id
      Nombre producto
      Precio
      Cantidad
      Eliminar
      ‘;

      for ($i=0;$inPro;$i++){
      if(isset($this->array_id_pro[$i])>0){
      echo «»;
      echo «» . $this->array_id_pro[$i] .»»;
      echo «» . $this->array_nombre_pro[$i].»»;
      echo «» . $this->array_precio_pro[$i] . «»;
      echo «» . $this->array_cant_pro[$i] . «»;
      echo ««;
      echo «»;

      $suma += $this->array_precio_pro[$i];
      }
      }
      //muestro el total
      echo «TOTAL: $suma «;
      //total más IVA
      echo «IVA (12%): » . $suma * 0.12 . « «;
      echo «»;
      }

      }

  5. Hola. Tu ejemplo está muy bueno por su sencillez, pero quería pedirte ayuda porque a mí me da varios errores. Cuando lo corro por primera vez me dice que ‘txtusuario’ no está definido como index. Igual con ‘nickname’ no está definido como index. Después me dice que $grabado no está definido. Y por último, en el campo text del input me aparece «Notice: Undefined index: nickname in C:\localhost\SESSION\pagina1.php on line 21»

    Los tres primeros los resolví agregando ‘isset’ y declarando $grabado = ‘ ‘ ,pero el del campo text no pude hacer nada.

    De todas maneras me da mucha curiosidad de por qué a ti sí te funciona bien y a mí no. ¿Será algo de la configuración de PHP en mi máquina?

    Gracias !!!

  6. muchas gracias ya me queda un poco mas claro la situacion respecto a esta variable global !! 😀

  7. Pido su ayuda, ya que usted conoce bastante de PHP, necesito pasar una variable entre distintas páginas .php, por favor podría enviarme un ejemplo de ello usando session_start() y $_SESSION[‘valor’], claro está usando method=»post»…

    Muchas gracias…

    Arturo Ramírez…

  8. $_session[‘valor’] = ‘al valor que necesitas’

  9. $valor = $_POST[‘valor’]; //valor que traes del post
    $_SESSION[‘valor’] = $valor; //valor que le das a la variable session

  10. Una pregunta, ¿puedo traer mas datos del usuario de una tabla con la varible $_SESSION?

  11. Hola muy buen ejemplo, no habia encontrado nada!! este funciono, pero como puedo hacer para que al llenar mi carrito agarre el «id» y no que se agrege a todos los articulos lo mismo, muchas gracias

  12. Hola saludos, como puedo hacer para que no se repita la misma variable en un carrito de compras, sino que agarre el «id», del articulo y aparezca la variable que le corresponde si me explico?

  13. Hola muy interesante artículo. Cuál es la diferencia entre utilizar $_SESSION[] o usar $GLOBALS[]. Son similares?
    Gracias.

  14. excelente. gracias

  15. Buenas, que tal

    Gracias por el ejemplo de código

    un detalle, el plugin que tienes para poner el código no permite copiar-pegar el código, ni ningúna de las funciones, por lo menos usando chrome no me ha dejado.

    Saludos

  16. Mil Gracias !!!

  17. gracias me ayudo mucho tu codigo.
    Excelente. =)

  18. gracias !!!!!!1

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *