7 - Sesiones

[editar]
Curso gratis creado por Coder. Extraido de: http://www.tomatoma.ws/subsecciones.php?forum_id=27&catid=22&todos=1
08 de Marzo de 2006
Cómo hemos visto, las cookies no nos sirven para guardar grandes cantidades de información, además las cookies tienen mala imagen, por lo que muchos usuarios las desactivan.

Las sesiones solucionan este problema. En lugar de guardar los datos como cookies en el navegador, las sesiones permiten guardar la información en el servidor. Lo único que se guarda en el navegador es una cookie que contiene el id de sesión del usuario: una variable que php vigila en todas las páginas y que utiliza para cargar los datos asociados a esa sesión.

A menos que sea configurado de otra manera, las sesiones funcionan estableciendo automáticamente una cookie en el navegador del usuario que contiene la id de la sesión: una cadena de texto y toda la duración de su visita en el site. El navegador manda esta cookie al solicitar cualquier página en el servidor. Utilizando una serie de archivos temporales que se guardan en el servidor, PHP puede hacer un seguimiento de las variables registradas en cada sesión y sus valores.

Una de las ventajas de las sesiones de php es que siguen funcionando aunque las cookies estén desactivadas. Cuando php detecta que las cookies no están activadas, añade automáticamente la id de sesión como una query string en todos los enlaces de la página. Para que esto funcione hay que cumplir dos requisitos:


  • todas las páginas de site tienen que tener la extensión php, pues de lo contrario php no puede añadir la id sesión a páginas que no sean php.

  • Además es necesario que session.use_trans_sid esté activado en en php.ini


Cómo configurar php.ini para que funcionen las sesiones
Si tienes la página alojada en un servidor externo, lo más probable es que esto ya esté así configurado. Si tienes tu propio servidor tendrás que asegurarte de que está bien configurado.

Abre php.ini en un editor de textos y busca la sección [session] encontrarás unas 20 opciones que empiezan con la palabra session, tenemos que verificar los siguientes:

Código:

session.save_handler = files
session.save_path = C:\WINDOWS\TEMP
session.use_cookies = 1
session.use_trans_sid = 1

session.save_path establece dónde se van a guardar los archivos temporales para seguir las sesiones. Debe ser un directorio que exista en el servidor, si el directorio no existe el directorio nos dará errores. En Unix se suele utilizar /tmp. En windows podría ser C:\WINDOWS\TEMP o D:\PHP\SESIONES. Una vez hechos todas las modificaciones necesarias hay que reiniciar el servidor.

  • Para utilizar una sesión existente o crear una nueva: session_start(). Cómo utiliza cookies hay que llamar a la función antes de envíar ningún contenido a la página.

  • Para guardar variables en las sesiones y poder utilizarlas en otros scripts utilizamos la función session_register($pass); Para quitar una variable de la sesión session_unregister($pass);

  • Para terminar la sesión, y todas las variables asociadas: session_destroy();


Vamos a ver cómo montaríamos un carrito de la compra
Vamos a crear dos scripts:

  1. Un catálogo de productos en el que podremos ir añadiendo productos (catalogo.php)
  2. Una página de salida, que muestra los contenidos del carrito para confirmación (carrito.php).


Desde la página de confirmación, podríamos enviar el pedido a un sistema que lo procesara y se ocupara del pago y del envío de los productos.

Empecemos con el catálogo

El ejemplo que vamos a ver de utilización de las sesiones está basado en el libro de Kevin Yank: "Build your Own Database Driven Website using php y Mysql". Las modificaciones son debidas a que mi estilo de hacer algunas cosas es distinto, pero por lo demás es igual. Si queréis aprender es un libro excelente.

catalogo.php

Código:
<?php
$carrito = array();
session_start();
session_register('carrito');
if($comprar != )<BR>{<BR>añadir un producto al final del array $carrito<BR>$carrito[] = $comprar;<BR>header("Location: $PHP_SELF?"
><BR><html><BR><head><BR><title>Catálogo de productos</title><BR></head><BR><body><BR>Tienes en el carrito de la compra: <?php echo count($carrito); ?> productos.<BR><p> <a href="carrito.php" title="Ver el carrito"> Mira lo que tienes el carrito</a><BR><?php<BR>$productos = array ("Dicionario", "Calculadora", "Pluma Montblanc", "Zapatos de ante azul", "pantalones verdes");<BR><BR>$precios = array("20", "50", "2000", "200", "50");<BR>?><BR><BR><table border="1"><BR>  <tr><BR>      <th> Descripción  del producto</th><BR>   <th> Precio</th><BR>  </tr> <BR><BR><?php<BR>for($i =0; $i < count($productos); $i++) {<BR>?><BR><BR><tr><BR>   <td><?php echo $productos[$i]; ?> </td><BR>   <td><?php echo number_format($precios[$i],2); ?> € </td><BR>   <td><a href="catalogo.php?comprar=<?php echo $i ?>">Comprar</a> </td><BR><tr><BR><?php<BR>}<BR>?><BR><BR></table><BR>Todos los precios son inventados <IMG alt=:-) src= http://www.wikilearning.com/imagescc/10115/icon_biggrin.gif" alt="image" /> border=0><BR></body><BR></html><BR><BR></TD></TR></TBODY></TABLE><BR><SPAN style="FONT-WEIGHT: bold">carrito.php</SPAN> <BR></SPAN>
<TABLE cellSpacing=1 cellPadding=3 width="90%" align=center border=0>
<TBODY>
<TR>
<TD><SPAN class=genmed><B>Código:</B></SPAN></TD></TR>
<TR>
<TD class=code><?php<BR>$carrito = array();<BR>session_start();<BR>session_register('carrito');<BR>if($vacio != )
{
//añadir un producto al final del array $carrito
session_unregister('carrito');
header("Location: $PHP_SELF?".SID);
exit();
}
?>
<html>
<head>
<title>Tu carrito de la compra</title>
</head>
<body>
Tienes en el carrito de la compra: <?php echo count($carrito); ?> productos.
<p> <a href="carrito.php" title="Ver el carrito"> Mira lo que tienes el carrito</a>
<?php
$productos = array ("Dicionario", "Calculadora", "Pluma Montblanc", "Zapatos de ante azul", "pantalones verdes");

$precios = array("20", "50", "2000", "200", "50");
?>

<table border="1">
  <tr>
      <th> Descripción  del producto</th>
   <th> Precio</th>
  </tr>

<?php
for($i =0; $i < count($carrito); $i++) {
?>

<tr>
   <td><?php echo $productos[$carrito[$i]]; ?> </td>
   <td><?php echo number_format($precios[$carrito[$i]],2); ?> € </td>
   <td><a href="catalogo.php?comprar=<?php echo $i ?>">Comprar</a> </td>
</tr>

<?php
$total = $total + $precios[$carrito[$i]];
}
?>
<tr>
   <th align="right"> Total:</th>
   <th align="right"><?php echo number_format($total,2);?>

</table>
<a href="catalogo.php">Seguir comprando</a><p>
<a href="carrito.php?vacio=1">Vaciar carrito de la compra</a>
</body>
</html>

[editar]

22 opiniones

exelentisimo

dure dos semanas buscando un tutorial y este es el mas detallado y que he visto.
gracias por tus aporte felicitacione
Gracias '

Gracias hermanoo..
al fin entiendo y bastante bien el inner join...fuiste de gran ayuda...
Unix/Linux
Instalacion PHP

no pude lograr instalar php, pero apache me funciona de perilla, he bajado distintas versiones, pero en ninguna puedo hacerlo funcionar creando un archivo .php y visualizarlo en la interfaz web
El salvador

Esta version descarga amiga marcela XAMPP 1.7.2!
Instalacion apache.

Hola no fui capaz de instalar apache no encuentro al version que dices ahi, porfa me pueden colaborar.
1 2 3 4 5 | siguiente >

Cursos gratis relacionados con 'PHP y MySQL para gentes de letras'

Si nunca se te ha pasado por la imaginación que podrías llegar a programar, con... Más »

Autor y licencia de 'PHP y MySQL para gentes de letras'

Este contenido ha sido recopilado por el equipo de Wikilearning. Todo el contenido recopilado se ha obtenido respetando y comunicando en nuestro site la licencia de cada fuente.
Wikilearning tiene permiso expreso por escrito de los autores para publicar los contenidos que ha extraído de otras webs, incluyendo su uso comercial.