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.
|
Manuales relacionados con este artículo
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;
}
}
?>
| Comentarios sin revisar |
|
Entre los comentarios no revisados puede haber algunos interesantes que se hayan enviado recientemente.
|
Se han encontrado 4 comentarios sin revisar
Ir arriba