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.

php
  1. // home.php
  2. session_start();
  3. $_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.

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

Recuperar variables de Sesión

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

php
  1. // user.php
  2. session_start();
  3. 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.

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

Eliminando datos de sesión

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

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

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

php
  1. // clear.php
  2. session_start();
  3.  
  4. session_unset();
  5. 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.

php
  1. // debug.php
  2. session_start();
  3. 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.

Comentarios Total 10 comentarios


Diego
Publicado: 29/10/2011 10:51 pm

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
Publicado: 09/11/2011 6:59 pm

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
Publicado: 28/11/2011 12:27 pm

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
Publicado: 17/08/2012 6:20 pm

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
Publicado: 25/12/2012 4:08 am

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)

Vitho - Gif animados
Publicado: 18/03/2013 10:08 pm

Exelente aporte, estaba buscando esto pero en muchas web no lo explican tan bien como aca

Se agradece el aporte

Myara
Publicado: 21/08/2013 5:46 pm

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
Publicado: 28/08/2013 2:04 pm

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
Publicado: 08/09/2013 4:33 am

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
Publicado: 09/09/2013 2:32 pm

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();
}

 

Comentar

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;.

(Requerido)

(Requerido, no será publicado)

(Requerido)

(Tags aceptados: <a> <em> <strong> <code> <ul> <li>)