Portada | Monotemáticos | Secciones | Desarrolladores | Comunidad | Servicios | Servicios profesionales | RSS
Desde 0 | HTML | CSS | ASP | PHP | AJAX | Javascript | Promoción de webs | Rentabilidad de webs
Directorio | Manuales | Scripts | FAQs | Programas | Artículos Copyleft | Actualidad | La Cosecha | Colabora
Registrarse | Vuestras páginas | Foros del web | Lista de correo | Boletín de novedades
Generador METAs | Compras | Busca cursos
Alojamiento | Dominios.es | Micropagos SMS | Buscadores | Patentes, marcas | Creación web | Multimedia | Videos
Desarrollo Freelance | Buscar proyectos | Buscar profesionales | Solicitar desarrollo

Tutorial de sesiones en PHP


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.


01/1/70 - 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.

 Seguir navegando a partir aquí:
+ 1 manual relacionado
+ 3 categorias relacionadas
+ 11 comentarios (Añadir)
+ 4 comentarios no revisados

 Autoría, licencia y acciones sobre este artículo

Informe de Miguel Angel Alvarez*
Director de DesarrolloWeb.com

Licencia Copyleft.
Puedes reproducirlo citando al autor y enlazando con DesarrolloWeb.com.

* Para consultas técnicas utilizar la lista de correo.

Versión imprimible Versión imprimible del artículo
Enviar artículo por e-mail Enviar artículo por e-mail
Añadir un comentario al artículo Publicar un comentario del artículo

Manuales relacionados con este artículo
Dentro de Taller de PHP

Categorias relacionadas
A través de las categorías de nuestro directorio se pueden encontrar otro tipo de recursos relacionados con este artículo:
+ Entrar en Colecciones de scripts
+ Entrar en Scripts en PHP
+ Entrar en Manuales de PHP


 Comentarios de los visitantes
Los comentarios de los visitantes son para ampliar la información del artículo. Cualquiera puede participar.
Se muestran 11 comentarios revisados

 Comentario de vicente
22/3/04 
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

 Comentario de Erick
24/7/04 
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 );

}
}

 Comentario de daCrow
29/7/05 
Todavía se puede mejorar así:

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

Saludos

 Comentario de Patton
02/8/05 
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

 Comentario de Patton
07/8/05 
$item = $_POST['item'];
$cantidad = $_POST['cantidad'];
antes de session star();
Pa los ke no les funcione el formulario x regiter_globals

 Comentario de Ivan
11/8/05 
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;
}
}

 Comentario de patton
21/8/05 
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(); }

 Comentario de churla
05/10/05 
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.

 Comentario de javier gallegos
14/12/05 
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

 Comentario de GordoChow
16/12/05 
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

 Comentario de Verónica
05/5/06 
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;
}
}
?>

Añadir un comentario al artículo Añadir un comentario del artículo
 Comentarios sin revisar
Entre los comentarios no revisados puede haber algunos interesantes que se hayan enviado recientemente.
 Se han encontrado 4 comentarios sin revisar

Ver el comentario no revisadoVer los comentarios no revisados
Añadir un comentario al artículo Añadir un comentario del artículo



Enlaces:
Maestrosdelweb
  Ir arriba

Manuales relacionados
+Taller de PHP
Categorías
+Colecciones de scripts
+Scripts en PHP
+Manuales de PHP

Lectura recomendada

Compra este libro en Agapea, la librería urgente a domicilio.

Tienda DesarrolloWeb

DesarrolloWeb.com | Copyright | Anunciese | Acerca de | Datos legales | Contacta | Por GuiarteMultimedia