dominios y alojamiento web en hostalia

Tutorial de sesiones en PHP

01 de January de 2001
Valoración del artículo:
Este es un tutorial básico para el manejo y control de sesiones en PHP, una de las consultas más realizadas sobre este lenguaje.
Veamos un sencillo ejemplo de uso de sesiones para ilustrar a los usuarios más inexpertos el manejo de sesiones con PHP en sus procesos más básicos, como son la inicialización de sesiones, comprobar si existen variables de sesión, crearlas y modificarlas.

En este ejemplo vamos a hacer un sistema para llevar la cuenta de las páginas que ha visto un visitante. Es decir, si entra a una página del sitio por primera vez, contamos que ha visto una página, luego con cada página adicional que visite, seguiremos acumulando 1 en la cuenta de páginas vistas dentro del sitio. Del mismo modo, si se recarga una página o se vuelve a la misma página que ya se estuvo, también haremos que se acumule 1 en su cuenta.

Para aprender a trabajar con sesiones recomendamos leer el artículo sesiones en PHP.

Lo que tendremos que hacer en este ejercicio es lo siguiente:

- Inicializar la sesión
- Si no tenemos el contador de páginas creado, lo inicializamos al valor 1
- Si tenemos el contador de páginas creado, lo incrementamos en 1.

<? session_start();
if (!isset($_SESSION["cuenta_paginas"])){
    $_SESSION["cuenta_paginas"] = 1;
}else{
    $_SESSION["cuenta_paginas"]++;
}
?>
<html>
<head>
<title>Contar páginas vistas por un usuario en toda su sesión</title>
</head>

<body>
<?
echo "Desde que entraste has visto " . $_SESSION["cuenta_paginas"] . " páginas";
?>
<br>
<br>
<a href="otracuenta.php">Ver otra página</a>
</body>
</html>

Como se ha podido ver, lo primero que debemos hacer es inicializar la sesión con session_start().

Luego de inicializar la sesión podemos trabajar con variables de sesión en cualquier lugar del código PHP. Nosotros vamos a crear y utilizar una variable de sesión para llevar la cuenta del número de páginas que hemos visto.

$_SESSION["cuenta_paginas"]

Para ver si una variable de sesión ha sido creada podemos utilizar la función isset() pasándole como parámetro la variable que deseamos saber si ha sido creada. Si no fue creada anteriormente, simplemente la creamos (inicializando su valor a 1). Si fue creada, pues que tenemos que incrementar en 1. Eso se consigue con este código:

if (!isset($_SESSION["cuenta_paginas"])){
    $_SESSION["cuenta_paginas"] = 1;
}else{
    $_SESSION["cuenta_paginas"]++;
}

Eso es todo! Ahora lo que se supone que tenemos son otras páginas en el mismo sitio que también tienen que incrementar en 1 el contador de páginas vistas por ese usuario en esa sesión.

Eso lo podríamos hacer con el mismo trozo de código, como el que hemos visto antes, colocado al principio del archivo PHP.

<? session_start();
if (!isset($_SESSION["cuenta_paginas"])){
    $_SESSION["cuenta_paginas"] = 1;
}else{
    $_SESSION["cuenta_paginas"]++;
}
?>

Luego, en cualquier momento, si deseamos mostrar el número de páginas vistas en un momento dado, tendríamos que hacer algo como esto:

<? echo "Has visto " . $_SESSION["cuenta_paginas"] . " páginas, contando actualizaciones de paginas"; ?>

Podemos ver el ejemplo relatado en funcionamiento.

Compartir en redes sociales

Comentarios
Fueron enviados 31 comentarios al artículo
9 comentarios no revisados
22 comentarios revisados:
Por: vicente
22/3/2004
La aplicacion me parece muy buena para iniciarse en el tema de las sesiones, pero hay una parte del codigo que se puede hacer más sencilla y rápida.

LA PARTE PARA AÑADIR ITEMS A LA CESTA:

if ($item){
if (!isset($itemsEnCesta)){
$itemsEnCesta[$item]=$cantidad;
}else{
foreach($itemsEnCesta as $k => $v){
if ($item==$k){
$itemsEnCesta[$k]+=$cantidad;
$encontrado=1;
}
}
if (!$encontrado) $itemsEnCesta[$item]=$cantidad;
}
}

SE PODRIA CAMBIAR POR:

if ($item)
{
    if ( isset( $itemsEnCesta[$item] ) )
    {
       $itemsEnCesta[$item]+=$cantidad;
    }
    else
    {
       $itemsEnCesta[$item]=$cantidad;
    }
}

Más sencilla y a la vez mas eficiente, ya que no esta hecha en un bucle
Por: Erick
24/7/2004
Ami parecer está mejor la primer forma de añadir al carrito, ya que esa misma parte de codigo lo puedes modificar y hacer cosas como Elimitar una cantidad de Items, o bien añadir la compra a la base de datos.


foreach($itemsEnCesta as $k => $v){

if($v>0){

mysql_query("INSERT INTO detalle_compra (Folio,IDArticulo," .
"Cantidad) VALUES (" .
$folio . "," .
$k . "," .
$v . ")",$mysql);


mysql_query("update almacen set Existencias=Existencias- " . $v . " where IDArticulo= " . $k ,$mysql );

}
}
Por: daCrow
29/7/2005
Todavía se puede mejorar así:

if($_POST["itemActual"])
$_SESSION["cesta"][$_POST["itemActual"]] += $_POST["cantidad"];

Saludos
Por: Patton
02/8/2005
Hay un erroren este código

<?php
session_register('contador');
echo '<a href="'.$PHP_SELF.'?'.SID.'">Contador vale: '.++$contador.'</a>';
?>
En echo debería ser:
echo '<a href="'.$PHP_SELF.'?'.SID.'">Contador vale: '.++$_SESSION['contador'].'</a>';

tb podría usarse $_REQUEST
Por: Patton
07/8/2005
$item = $_POST['item'];
$cantidad = $_POST['cantidad'];
antes de session star();
Pa los ke no les funcione el formulario x regiter_globals
Por: Ivan
11/8/2005
Para hacer el carrito mas completo Prodrín agregarle estas modificaciones que le hice, asi podrán quitar items, y sumar y restar cantidades:


<?php
session_start();
session_register('itemsEnCesta');
$encontrado=0;
$total=0;
if (isset($item)){
if (!isset($itemsEnCesta)){
$itemsEnCesta[$item]=$cantidad;
}else{
foreach($itemsEnCesta as $k => $v){
if ($item==$k){
//$total+=$v;
$itemsEnCesta[$k]+=$cantidad;
$encontrado=1;
}
}
if (!$encontrado) $itemsEnCesta[$item]=$cantidad;
}
}
?>
<html>
<body>
<tt>
<form action="<?=$PHP_SELF."?".SID?>" method="post">
Dime el producto <input type="text" name="item" size="20"><br>
Cuantas unidades <input type="text" name="cantidad" size="20">
<br></br>
<input type="submit" value="Añadir a la cesta"><br>
</form>
<?

if (isset($valor2)){
foreach($itemsEnCesta as $k => $v){
if ($valor2==$k){
$itemsEnCesta[$k]+=1;
}
}
}

if (isset($valor3)){
foreach($itemsEnCesta as $k => $v){
if ($itemsEnCesta[$k]>1){
if ($valor3==$k){
$itemsEnCesta[$k]-=1;
}
}else{
$valor=$valor3;
}
}
Por: patton
21/8/2005
Ivan
Parece ke lo ke kiere hacer este wn es borrar, pero no!! Ni siquiera cambiaste el menú. Lo uniko ke hace es entregarle la cantidad al arreglo con clave item es decir la celda del arreglo ke contiene ese producto ke se ingreso, si es un mismo producto busca en el arreglo si lo encuentra añade la nueva cantidad, es decir hace lo mismo ke lo ke dice el tutorial aporte? ninguno
Salvador
Lindo tu código, pero si nos salvas, salva primero el codigo sin errores
function valida1(){ document.forma.action= "/salvador_1.php?PHPSESSID=d9c98acc2f5c5746274c0818859c8942"; document.forma.method= 'POST'; document.forma.submit(); } function valida2(){ document.forma.action= "respsession3_final.php"; document.forma.method= 'POST'; document.forma.submit(); }
Por: churla
05/10/2005
en el comentario anterios dijo que:

++$contador esta mal y que deberia ser ++$_SESSION['contador'] pues la verdad es que si estaba bien. siempre y cuando en el php.ini global este activo. y sino se deberia usar la segunda, pero sí si esta activado la primera es mas sencilla de usar.
Por: javier gallegos
14/12/2005
pues por mas que trate de correrlo no se podia, agregue
$item=$_POST[item]
$cantidad=$_POST[cantidad]
asi si jalo pero cada vez que ingreso algo incluso siendo un producto que ya estaba, no lo suma solo lo actualiza, lo que me indica que pra el programa jamas esta declarado el arreglo itemsEnCesta y nunca entra a la siguiente parte si alguien sabe que es lo que tengo mal por favor diganmelo, porque de otra forma pues de nada me sirve el programita
Por: GordoChow
16/12/2005
Buenas tiene mucha razon he visto que en muychos de los post añaden siempre:

<?php
session_register('contador');
echo '<a href="'.$PHP_SELF.'?'.SID.'">Contador vale: '.++$contador.'</a>';
?>

----cuando debe ser------------
<?php
session_register('contador');
$_SESSION['contador']++;
echo '<a href="'.$PHP_SELF.'?'.SID.'">Contador vale: '.$_SESSION['contador'].'</a>';
?>

------------------
grabe error en muchos tutoriales, sin embargo en los tutoriales de php explica detalladamente
--------lo siguiente:---------
<?php
session_start();
if (isset($HTTP_SESSION_VARS['count'])) {
$HTTP_SESSION_VARS['count']++;
}
else {
$HTTP_SESSION_VARS['count'] = 0;
}
?>

-------
Gracias un saludo. y aqui les dejo mi cherry
- Photoshop
- Adobe Acrobat
- Corel Photopaint
- Corel Draw
- Dreanweaver
- Marcromedia flash
- XML
- HTML
- PHP
- MYSQL (nivel basico)
- javascript (nivel basico)
- 3d max(modelado)

contactar a walter_apaza en HOT
GordoChow - Solutions
Por: Verónica
05/5/2006
El ejemplo es excelente y me ayudo mucho a entender el potencial del manejo de sesiones,
solo encontré dos detalles al correrlo

1.- Notice: Undefined variable: item in c:appservwwwejemses2.php on line 4
2.- Notice: Undefined variable: encontrado in c:appservwwwejemses2.php on line 14

Que se corrige Inicializando las variables: encontrado e item, el código quedaría así en esta parte:

<?php
session_start();
session_register('itemsEnCesta');
//Inicializacion de las variables
$encontrado=0;
if (!isset($item)){
$item="";
}
//
if ($item){
if (!isset($itemsEnCesta)){
$itemsEnCesta[$item]=$cantidad;
}else{
foreach($itemsEnCesta as $k => $v){
if ($item==$k){
$itemsEnCesta[$k]+=$cantidad;
$encontrado=1;//Encuentra el producto
}
}
if (!$encontrado) $itemsEnCesta[$item]=$cantidad;
}
}
?>
Por: panther22
01/6/2007
hola programadores e ingenieros, tengo un problema, miren estoy ttabajando con una base de datos mysql, y a la vez en php, necesito validar usuario pero eso ya lo sé, "i el ususario es correcto registrar en sesion, para acceder a sistema" eso no lo se, quien me puede ayudar..porfaa
Por: Brahyan
05/8/2007
hola... estoy epesando en esto de las sesioones y tengo una duda.... como hago por ejemplo:

creé una pagina en la cual el index me pide un login el cual valido en una base dedatos mysql y si esta es correcta me da como resultado session_start();
como hago para que si yo digito en la barra de direcciones http://index.php/otroArchivo.php no me abra sino que me pida el login.... lo he intantado hacer por medio de una sentencia if() en el cabasote de cada pafina pero no me da el resultado que espero.. al parecer cuando nombro una variable con el contenido de
session_start();
por ejemplo: $sesion=session_start(); al parecer lo qeu susede esque el sistema inicia la sesion cuando ve esta variable..... como puedo arreglar esto???
Por: Sol
20/8/2007
Hola, he realizado mis sesiones por mi cuenta, ummm pero tengo una duda, cuando inicio en una ventana de mi esplorador la sesion, ahi tengo ami usuario y sesion, y caundo abro otra ventana y pruebo con otro usuario y entro a mi aplicacion php que estoy desarrrolando, automaticamente la sesion anetrior toma la nueva sesion, generandome una sesion duplicada, y se vuelve el mismo usuario, ups! algo esta mal, pero no se que sera o a que se debe, podrian orientarme en que debo hacer?
gracias pro su tiempo y sus conocimientos.
Por: Felipe
10/9/2007
¿Cómo puedo crear perfiles a partir de la sesión?, es decir: que según el usuario registrado pueda acceder a ciertas partes, pero a otras no.
Por: cristhian
21/2/2009
Salu2, a todos. yo soy principiante en esto de php. estoy cursando el segudno año de progrmacion en un instituto. requiero de mucha ayuda,. si alguien podria ayudarme enviandome algunos ejemplos de php mysql. para yo poder perfeccionar mi programacion gracias. si tienen ejemplos de factura. o sesiones por usuario me ayudarian re bastante
Gracias
Briale0314@hotmail.com
problemas con autentificacion
Por: jorge
24/4/2009
Hola, muy útil su aportación, tengo una duda, estoy haciendo la autentificación de un sitio y lo estoy haciendo con variables de sesión.
el problema es que una vez que se logean la variable se queda guardada incluso cuando abandonan la pagina, por lo cual, si se abre el navegador y se escribe en la barra de direcciones una pagina interna y se quiere volar el log in esta accede.
como puedo llamar session_destroy cuando la pagina se cierre, o hay otra solución?
Problemas con usuarios registrados con session
Por: Diego
22/3/2010
HOLA GENIOS!!!!

Esta es la primera vez que acudo a ustedes y espero que me puedan hechar luz a este problemilla....

Tengo usuarios registrados en una base de datos con sus respectivos permisos para operar el sistema y los guardo en una variable de session, para que a medida que pasen las paginas , estas se comporten de acuerdo al permiso que tiene el usuario. Hasta aca todo bien... pero no se como hacer para que un mismo usuario no se loguee en dos pc distintas. Se entendio?

Cualquier ayuda me vendria muy bien.
Gracias.-
Tutorial en video
Por: Carlos
24/3/2010
que tal, hice este tutorial en video, espero q les sea de utilidad
http://www.youtube.com/watch?v=2wg6KHrkt0A
Problema con la sesion
Por: Cristian
15/4/2010
con todo lo visto en este foro , stoy haciendo una pagina, pero, a la hora de abrir la sesion y rellenar la variable, en la segunda pagina no me muestra el contenido de la variable, incluso poniendo session_start() antes de todo. este es un trozo del codigo donde guardo la informacion en la variable:

if ($usuOk && $passOk) {
$_SESSION["usu"]= $usu;
header("Refresh: 2; URL=http://localhost/PHP/gestion_Inc_pag2.php");
echo " el usuario es ". $_SESSION['usu'] ." .";
}

(despues de haber conprobado si el usuario y el password es el correcto pos se llegaria a ese codigo, y con $_SESSION["usu"]= $usu; relleno la variable con el nombre del usuario)

sin enbargo, en la siguiente pagina:

<?php

$usuario=$_SESSION["usu"];
echo $_SESSION["usu"];
include("Conexion_Aplicacion.php");
$link=Conectarse();

$resultado=mysql_query("select nombre from usuario where usuario LIKE '%$_SESSION["usu"]%'" ,$link);
while($fila =mysql_fetch_array($resultado))
{
$NomUsu= $fila['nombre'];
}

echo "<h1> Bienvenid@ ",$NomUsu,"</h1>";

mysql_close($link);
mysql_free_result($resultado);
?>


la sesion ya no tiene nada guardado. el primer 'echo' se muestar en blanco. alguna idea del porque?
register_globals=off
Por: Francisco
30/5/2010
si la directiva register_globlas se encuentra en off, lo mencionado en toda la informacion anterior serviria de la misma manera???..

estoy realizando un proyecto pero tengo que tener desactivada las variables globales
y al hacer esto
if (isset($_SESSION["usuario_administrador"]))
{
echo " $nombre "."$apellido";
}

no me imprime nada....... me imagino que por el register_globals=off que tengo en el php.ini.

alguien me podria decir como le puedo hacer con esto????

raul_r_...
Muy bueno
20/3/2012
Hola, muy bueno el artículo, es corto el ejemplo, pero bien claro en los aspectos importantes de las sesiones, q son fundamentales, tener siempre session_strart() y el manejo de las variables.

Saludos

Manuales relacionados
Categorias relacionadas
El autor
Lectura recomendada
Compra este libro en Agapea, la librería urgente a domicilio.
Últimas noticias
Donaciones
Si piensas que te hemos ayudado y merecemos tu apoyo económico...