Está en la página 1de 9

session_start

(PHP 4, PHP 5, PHP 7)


session_start Iniciar una nueva sesin o reanudar la existente

Descripcin
bool session_start ([ array $options = [] ] )

session_start() crea una sesin o reanuda la actual basada en un identificador de sesin pasado
mediante una peticin GET o POST, o pasado mediante una cookie.
Cuando session_start() es llamada o cuando se autoinicia una sesin, PHP llamar a los gestores de
almacenamiento de sesiones open y read. stos sern un gestor de almacenamiento proporcionado
por omisin o por extensiones de PHP (como SQLite o Memcached); o pueden ser un gestor
personalizado como est definido en session_set_save_handler(). La llamada de retorno read
recuperar cualquier informacin se de sesin existente (almacenada en un formato serializado
especial) y ser deserializada y usada para rellenar automticamente la variable superglobal
$_SESSION cuando la llamada de retorno read devuelva la informacin de sesin guardada a la
gestin de sesiones de PHP.
Para usar una sesin nominada llame a session_name() antes de llamar a session_start().
Cuando session.use_trans_sid est habilidado, la funcin session_start() registrar un gestor de
salida interno para la reescritura de URL.
Si un usuario utiliza ob_gzhandler o similar con ob_start(), el orden de las funciones es importante
para la salida adecuada. Por ejemplo, ob_gzhandler se debe registrar antes de iniciar una sesin.

Parmetros
options

Si se proporciona, este array asociativo de opciones sobrescribir las directivas de


configuracin de sesiones establecidas actualmente. Las claves no deben incluir el prefijo
session..
Adems del conjunto habitual de directivas de configuracin, tambin se puede proporcionar
la opcin read_and_close. Si se establece a TRUE, resultar en el cierre inmediato de la sesin
despus de haber sido leda, evitando as el bloqueo inncesario si los datos de la sesin no han
cambiado.

Valores devueltos
Esta funcin devuleve TRUE si una sesin fue iniciada satisfactoriamente, si no, devuelve FALSE.

Historial de cambios
Versin Descripcin
7.0.0 Se aadi el parmetro options.
5.3.0 Si una sesin falla al iniciarse, se devuelve FALSE. Anteriormente se devolva TRUE.
Versin Descripcin
A partir de PHP 4.3.3, llamar a session_start() despus de que una sesin estuviera
4.3.3 previamente iniciada resultaba en un error de nivel E_NOTICE. Tambin, el segundo
inicio de sesin se ignoraba simplemente.

Ejemplos
Un ejemplo de sesin bsico
Ejemplo #1 pagina1.php
<?php
// pagina1.php

session_start();

echo 'Bienvenido a la pgina #1';

$_SESSION['color'] = 'verde';
$_SESSION['animal'] = 'gato';
$_SESSION['instante'] = time();

// Funciona si la cookie de sesin fue aceptada


echo '<br /><a href="pagina2.php">pgina 2</a>';

// O quizs pasar el id de sesin, si fuera necesario


echo '<br /><a href="pagina2.php?' . SID . '">pgina 2</a>';
?>
Despus de ver pagina1.php, la segunda pgina pagina2.php contendr mgicamente la
informacin de la sesin. Consulte la referencia de sesiones para informarse sobre la propagacin
de los ID de sesiones ya que explica, por ejemplo, en qu consiste la constante SID.

Ejemplo #2 pagina2.php
<?php
// pagina2.php

session_start();

echo 'Bienvenido a la pgina #2<br />';

echo $_SESSION['color']; // verde


echo $_SESSION['animal']; // gato
echo date('Y m d H:i:s', $_SESSION['instante']);

// Puede ser conveniente usar el SID aqu, como hicimos en pagina1


.php
echo '<br /><a href="pagina1.php">pgina 1</a>';
?>
Proporcionar opciones a session_start()
Ejemplo #3 Sobrescribir el tiempo de vida de la cookie
<?php
// Esto enva una cookie persistente que dura un da day.
session_start([
'cookie_lifetime' => 86400,
]);
?>
Ejemplo #4 Leer la sesin y cerrarla
<?php
// Si sabemos que no necesitamos cambiar nada de la sesin,
// podemos simplemente leerla y cerrarla inmediatamente para evita
r
// bloquear el fichero de sesin y otras pginas
session_start([
'cookie_lifetime' => 86400,
'read_and_close' => true,
]);

Notas
Nota:

Para usar sesiones basadas en cookies, session_start() debe ser llamada antes de
imprimir cualquier cosa en el navegador.
Nota:

Se recomienda el uso de zlib.output_compression en vez de ob_gzhandler()


Nota:

Esta funcin enva varias cabeceras HTTP dependiendo de la configuracin. Vase


session_cache_limiter() para personalizar estas cabeceras.

Inicio de la sesin en PHP con session_start


Definicin de la funcin PHP session_start
La funcin PHP session_start crea una sesin o reanuda la actual basada en un identificador de
sesin pasado mediante una peticin GET o POST, o pasado mediante una cookie.
Para usar una sesin nominada hay que utilizar la funcin session_name antes de llamar a
session_start.
Cuando session.use_trans_sid est habilidado, la funcin session_start registrar un gestor de salida
interno para la reescritura de la URL.
Si un usuario utiliza ob_gzhandler o similar con ob_start, el orden de las funciones es importante
para la salida adecuada. Por ejemplo, ob_gzhandler se debe registrar antes de iniciar una sesin.

Cmo usar session_start en nuestro sitio web


En todas las pginas de nuestro sitio web donde necesitemos usar algn dato del usuario que ha
iniciado sesin o mostrar alguna opcin especial para el usuario deberemos aadir el siguiente
cdigo, siempre al principio del fichero (antes de cualquier etiqueta HTML de la pgina):
<?
session_start();
?>

Con el procedimiento "session_start()" iniciaremos la sesin, si ya est iniciada no har nada.

Registrar una variable de sesin, establecer un valor para una


variable de sesin en PHP
Para registrar una variable de sesin en versiones anteriores de PHP, se usaba la funcin
session_register, aunque esta funcin no es aconsejada pues est obsoleta, a partir de PHP 5.3.0.
Para registrar una variable de sesin y establecer un valor usaremos
$_SESSION["nombre_varaable"]. En el siguiente ejemplo, registramos y establecemos el valor
para las variables de sesin nombre_cliente y nombre_usuario:
$sql = "SELECT u.usuario, u.contrasena, u.idcliente, c.nombre cliente " .
" FROM usuario u, cliente c ".
" WHERE c.id=u.idcliente and usuario='" . $txtusuario . "'";
$sqlResultado = mysql_query($sql);
$row = mysql_fetch_array($sqlResultado);
$contrasena = $row["contrasena"];
$idcliente = $row["idcliente"];

if ($contrasena == md5($txtcontrasena))
{
//establecermos las variables de sesin
$_SESSION["nombre_usuario"] = $row["usuario"];
$_SESSION["nombre_cliente"] = $row["cliente"];
...

El ejemplo anterior nos sirve tambin como mtodo para realizar el inicio de sesin (validacin) de
un usuario en nuestro sitio web, mostramos la consulta SQL que se ejecutar y la comprobacin de
si el usuario existe y si la contrasea introducida en el formulario (txtcontrasena) coincide con la
guardada en la base de datos (contrasena una vez obtenido su hash md5).
Nota: cuando el usuario se da de alta en nuestro sitio web, guardamos el hash (md5) de la
contrasea en la base de datos, usando la funcin de PHP: md5. Por ello, en el ejemplo anterior,
cuando mostramos al usuario el formulario para iniciar sesin y ste introduce su nick y su
contrasea, para comparar su contrasea con la de la base de datos, utilizamos nuevamente la
funcin de PHP md5, para comparar el hash md5 de la contrasea introducida por el usuario con el
guardado en la base de datos. Este mtodo es el idneo, as, ante cualquier acceso indebido a la
tabla de usuarios de nuestra base de datos, slo se mostrar en el campo "contrasena" el valor del
hash md5, nunca la contrasea del usuario y puesto que el hash md5 es unidireccional, de l no se
puede obtener la contrasea (en teora).

Aadir un enlace para que el usuario pueda cerrar la sesin en


cualquier momento
Cuando el usuario ha iniciado sesin, siempre es recomendable aadir un enlace para que ste
pueda cerrar la sesin en cualquier momento de forma segura. As evitaremos accesos indebidos por
otros usuarios que usen el mismo equipo que el que inici sesin. En teora, siempre que se cierre el
navegador web se cerrar la sesin automticamente, pero es aconsejable aadir este enlace para
que el usuario decida cundo cerrar la sesin.
Para aadir el enlace de "Cerrar sesin", podemos insertar el siguiente cdigo PHP donde queramos
que aparezca el enlace:
if (! empty($_SESSION["nombre_usuario"]))
{
echo "<a href="cerrarsesion.php" title="Cerrar
sesin">Bienvenid@</a>" .
$_SESSION["nombre_usuario"] . " (" .
$_SESSION["nombre_cliente"] . ")";
}

Explicamos el cdigo anterior:


Con if (! empty($_SESSION["nombre_usuario"])) comprobamos si el usuario ha iniciado
sesin, si lo ha hecho la variable de sesin nombre_usuario tendr un valor, por lo que se
ejecutar el cdigo del if.
Con el cdigo que hay dentro del if, lo nico que hacemos es mostrar algo as:

Bienveni@ ajpdsoft (Proyecto AjpdSoft)

Donde:

"Bienveni@" ser un enlace a la pgina "cerrarsesion.php" que describiremos ms adelante.


"ajpdsoft": ser el nombre de usuario que haya iniciado la sesin.
"Proyecto AjpdSoft": ser el nombre del cliente que hayamos asignado al usuario.
Como ya hemos comentado, este cdigo PHP lo pondremos en todas las pginas de nuestro sitio
web donde queramos que aparezca el enlace a cerrar sesin. Lo colocaremos, dentro de cada pgina,
en el sitio donde queramos que aparezca. Puesto que PHP permite "mezclarse" con cdigo HTML
no tendremos problema, por ejemplo:
<td style="background-image:url(img/ajpdsoft.png)">

<?
if (! empty($_SESSION["nombre_usuario"]))
{
echo "<a href="cerrarsesion.php" title="Cerrar
sesin">Bienvenid@</a>" .
$_SESSION["nombre_usuario"] . " (" .
$_SESSION["nombre_cliente"] . ")";
}
?>

<table border="0" align="right" cellpadding="0" cellspacing="0">


<tr>

Fichero "cerrarsesion.php" para cerrar sesin en PHP con


session_destroy
Definicin de la funcin session_destroy de PHP
destruye toda la informacin asociada con la sesin actual. No destruye ninguna de las variables
globales asociadas con la sesin, ni destruye la cookie de sesin. Para volver a utilizar las variables
de sesin se debe llamar a session_start().
Para destruir la sesin completamente, como desconectar al usuario, el id de sesin tambin debe
ser destruido. Si se usa una cookie para propagar el id de sesin (comportamiento por defecto),
entonces la cookie de sesin se debe borrar. setcookie() se puede usar para eso.

Uso de la funcin session_destroy para cerrar la sesin en PHP


Crearemos un fichero de texto plano sin formato con el siguiente contenido, guardndolo con el
nombre "cerrarsesion.php" y lo subiremos a nuestro sitio FTP:
<?
session_start();
unset($_SESSION["nombre_usuario"]);
unset($_SESSION["nombre_cliente"]);
session_destroy();
header("Location: index.php");
exit;
?>

A continuacin explicamos cada lnea del fichero:


session_start: funcin ya explicada ms arriba, puesto que la sesin ya est iniciada, no har
nada.
unset($_SESSION["nombre_usuario"]) y unset($_SESSION["nombre_cliente"]): liberarn
las variables de sesin registradas, en el ejemplo liberamos dos variables de sesin:
nombre_usuario y nombre_cliente. Este mtodo es equivalente al mtodo ya obsoleto
session_unregister (en desuso a partir de la versin 5.3.0 de PHP).
session_destroy: libera la sesin actual, elimina cualquier dato de la sesin.
header("Location: index.php"): tras liberar la sesin con los mtodos anteriores, esta lnea
vuelve a mostrar la pgina "index.php" de nuestro sitio web.
Nota 1: si tenemos muchas variables de sesin y queremos liberarlas todas podemos usar este
cdigo PHP:
$_SESSION = array();

Nota 2: si queremos eliminar todos los datos de las cookies guardadas podemos ejecutar este cdigo
PHP:
if (ini_get("session.use_cookies"))
{
$params = session_get_cookie_params();
setcookie(session_name(), '', time() - 42000,
$params["path"], $params["domain"],
$params["secure"], $params["httponly"]);
}

Aviso importante sobre las sesiones en PHP aqu descritas


Conviene dejar claro que el mtodo de sesiones explicado en este artculo no es el ms profesional y
seguro. Existen muchas ms funciones para el tratamiento de las sesiones en PHP como son:
session_cache_expire: devuelve la caducidad de la cach actual.
session_cache_limiter: bbtener y/o establecer el limitador de cach actual.
session_commit: alias de session_write_close.
session_decode: decodifica la informacin de sesin desde una cadena.
session_destroy: destruye toda la informacin registrada de una sesin.
session_encode: codifica la informacin de la sesin actual como una cadena.
session_get_cookie_params: obtener los parmetros de la cookie de sesin.
session_id: obtener y/o establecer el id de sesin actual.
session_is_registered: averiguar si una variable global est registrada en una sesin.
session_module_name: obtiene y/o establece el mdulo de sesin actual.
session_name: obtener y/o establecer el nombre de la sesin actual.
session_regenerate_id: actualiza el id de sesin actual con uno generado ms reciente.
session_register: registrar una o ms variables globales con la sesin actual.
session_save_path: obtener y/o establecer la ruta de almacenamiento de la sesin actual.
session_set_cookie_params: establecer los parmetros de la cookie de sesin.
session_set_save_handler: establece funciones de almacenamiento de sesiones a nivel de
usuario.
session_start: inicializar informacin de sesin.
session_unregister: deja de registrar una variable global de la sesin actual.
session_unset: libera todas las variables de sesin.
session_write_close: escribir informacin de sesin y finalizar la sesin.

Bien usadas todas estas funciones (o las necesarias) podrn dotar a nuestro sitio web de mayor
robustez y seguridad. Por supuesto, lo explicado aqu no es lo ms seguro pero s, tal vez, lo ms
sencillo de implementar.
Por ejemplo, podramos usar la funcin session_id para obtener el ID de sesin del usuario actual y
guardarlo en una tabla de una base de datos, de esta forma podramos saber cuntos usuarios han
iniciado sesin en nuestro sitio web, qu usuarios y en qu da y hora:
$session_id = session_id();
$sql = "INSERT INTO sesiones (user_id, session_id) VALUES ('" .
$userid . "', '" . $session_id . "')'";
$resultado_sql = mysql_query($sql);

http://php.net/manual/es/function.mysql-free-result.php

Uno de los elementos que se pueden utilizar es el uso de: sesiones php, mysql_fre_result
y mysql_fetch_array.

Sesiones php

El manejo de sesiones en php utiliza al comando session_start().

session_start() crea una sesin o reanuda la actual basada en un identificador de sesin


pasado mediante una peticin GET o POST (php.net, 2015).

Ejemplo:

<?php <?php
// pagina2.php
// pagina1.php
session_start();
session_start(); echo 'Bienvenido a la pgina #2<br />';
echo 'Bienvenido a la pgina #1';
echo $_SESSION['color']; // verde
$_SESSION['color'] = 'verde'; echo $_SESSION['animal']; // gato
echo date('Y m d H:i:s',
$_SESSION['animal'] = 'gato';
$_SESSION['instante']);
$_SESSION['instante'] = time();
echo '<br /><a
echo '<br /><a
href="pagina1.php">pgina 1</a>';
href="pagina2.php">pgina 2</a>'; ?>
?>
Figura 1. Pagina1.php Figura 2. Pagina2.php

En la Pagina1.php (Figura 1) se observa las sesiones con sus datos, y en la pagina2.php


(Figura 2) se observa la informacin de la pagina1.php, debido al uso correcto de las
sesiones de php.

También podría gustarte