:::: MENU ::::

Manejo de sesiones en PHP

Las sesiones en PHP son una forma de mantener ciertos datos de un visitante entre los diversos accesos una web. De esta forma se pueden crear aplicaciones donde se le muestra al usuarios datos personalizados de acuerdo a las preferencias o acciones del usuario.

Las sesiones se manejan internamente por un identificador llamado SID (Session ID) el cual esta asociado a una única sesión y que ayuda a identificar el contenido de la sesión actual. Esta variable se propaga automaticamente a traves de Cookies o mediante URL.

Manejo de sesiones en PHP

Todas la variables de sesión son accesibles mediante arrays en la variable global $_SESSION. Adicionalmente ofrece una serie de funciones que permiten manejar detalladamente las sesiones de manera sencilla:

  • session_start inicializa una sesión y crea el identificador de sesión.
  • session_id devuelve el identificador de la sesión actual.
  • session_regenerate_id genera un nuevo identificador para la sesión actual.
  • session_unset limpia todas la variables de sesión registradas.
  • session_destroy elimina todas la variables de sesión registradas.

Crear variables de Sesión

Si deseamos crear variables de sesión para que se puedan utilizar a través de diferentes páginas inicializamos el manejo de sesiones con al función session_start y luego guardamos el dato deseado como variable de sesión utilizando la variable global $_SESSION.

// home.php
session_start();
$_SESSION["country"] = "Peru";

Podríamos mejorar el código si verificamos la existencia de la variable de sesión, si no existe entonces le asignamos un valor.

// home.php
session_start();
if (!isset($_SESSION["country"])) {
	$_SESSION["country"] = "Peru";	
}

Recuperar variables de Sesión

En las páginas siguientes podríamos acceder a las variables de sesión utilizando:

// user.php
session_start();
echo $_SESSION["country"];

Podríamos utilizar las variables de sesión para verificar si se han hecho acciones previas por parte del usuario, como haber seleccionado tu país por ejemplo si aún no lo ha hecho lo redireccionamos a la página inicial.

// user.php
session_start();
if (!isset($_SESSION["country"])) {
	header("Location: home.php");	
}
echo $_SESSION["country"];

Eliminando datos de sesión

Si deseamos eliminar una determinada variable de sesión le asignamos un valor vacío.

// clear.php
session_start();
$_SESSION["country"] = "";

Ahora si deseamos eliminar todas las variables de sesión lo hacemos de la siguiente forma:

// clear.php
session_start();

session_unset();
session_destroy();

Depurando Sesiones

Si se desea depurar las variables de sesión con sus respectivos valores se puede utilizar la función print_r.

// debug.php
session_start();
print_r($_SESSION);

Para mas información acerca del manejo y de las funciones disponibles para el manejo de sesiones pueden leer PHP: Session Functions. Para concluir les dejo los archivos fuente de este artículo para que puedan hacer sus pruebas.


10 Comentarios

  • Diego |

    Hola, la verdad que me gusta mucho tu blog…
    Programo en php y la verdad que siemrpe es bueno refrescar algunos conecptos…

    Un saludo

    Diego

  • Dante |

    de un tiempo para aqui en las paginas que use sesion me sale este error:
    Warning: session_start() [function.session-start]: open(/tmp/sess_8d139f800197b40140a7382555341275, O_RDWR) failed: Permission denied (13)

    estuve investigando y encontre que es un bug del php
    es probable que alguno de vosotros me pueda ayudar dado que no siempre ocurre

  • oxem |

    hola que tal , como puedo hacer para registrar cuando un usuario inicio por primera vez , y si es asi redireccionar a una pagina par a que establesca su contraseña .

  • Juan Francisco González |

    Sólo un detalle, al usar un $_SESSION[“country”] = “”; no estás eliminando la variable de sesión, le estás asignando un string vacío.
    Lo mejor sería usar la función unset.
    Por ej. unset($_SESSION[‘country’])
    Saludos!

  • Victor |

    Hola disculpa la verdad soy nuevo en esto de PHP lo estare usando unos dos meses, pero no soy tan bruto, estoy tratando de hacer un blog multiusuarios, tengo dos bases de datos (bueno varias), pero las importantes para este tema son dos Admin que solo tiene una fila registrada que podria decirse que es como para el acceso general, al backend, y el otro que es tabla editores que contiene un nick y contraseña que ese lo pienso usar para su seccion personal de publicasiones, cual es la logica que debo usar? para los accesos?
    mass bien como le pongo al panel general una seccion que sea la de admin
    y otra session para su seccion personal

    admin/ user (general) + pass(general)
    admin/ user (unico) + pass(unico)

  • Myara |

    Hola me gustaría saber si es q pueden explicarme como hacer para que cuando alguien tiene sección iniciada en una web al conectarse desde otro pc se les cierre la que tenían anterior mente no se si me explico pero me seria de gran ayuda saberlo urgente gracias.

  • unijimpe |

    Hola Myara, para hacer eso tienes que trabajar con una base de datos, cada vez que un usuario inicie sesión guardas en identificador de la sesión (session_id()) en base de datos, luego cada vez que el usuario accede a una página comparas el id actual con el que tienes guardado en base de datos, si son diferentes cierras la sesión del usuario.

  • luisi |

    Hola

    Me gusta mucho tu post referente a las variables de sesion, pero si en el archivo del servidor ‘php.ini’ tenemos

    session.auto_start = 1

    No hace falta poner la linea–> session_start()

    Yo lo tengo asi

    Un saludo

    http://www.visitaspirata.com

  • unijimpe |

    Efectivamente Luisi, si se tiene configurado session.auto_start = 1 en el php.ini significa que la sesión se inicializa automáticamente. El problema es que por defecto este parámetro es 0 o desactivado, por lo que si subes tu aplicación a un hosting es probable que no funcione correctamente.

    Es por ello que para inicializar una sesión es recomendable utilizar:
    if(!($_SESSION)) {
    session_start();
    }

Publica tu comentario

En este blog los comentarios están moderados, serán mostrados cuando el administrador los apruebe. Por favor, evita comentarios ofensivos u obscenos por que no serán aprobados.
Si deseas publicar código fuente debes hacerlo entre las etiquedas <code> y </code>, además debes reemplazar los carácteres < por &lt; y > por &gt;.