Google
Web dns.bdat.net

Re: [PHP-ES] Sobre sessions

Write haof XML files: Vladimir Hernandez ( interco@linuxbaja.org)
Fecha: vie 26 ago 2005 - 18:49:08 CEST


Quoting Alexander Garcia Gonzalez < frodo@jvr.cu>:

> Si entiendo bien el manual, session es una forma de trasmitir datos a partir
> de una pagina (en donde se inicia la session con session_start()) a traves de
> los continuos enlaces hasta que se cierra la session (session_close()).
> entiendo bien?
>
> creo entender ademas que la foma de identificar la session en las sucesivas
> pag es por medio de la variable SID. esta se transmite de forma transparente
> por la url si se compila php de una forma expesifica para ello (que lei, pero
> ahora no recuerdo). voy bien?
>
> tambien se pueden hacer variables de session cualquier variable que
> desee, por
> medio de $http_session_vars['$variable'] o $_session['$variable']; y esta ser
> transmitida a los enlaces posteriores. todo bien?
>
> duda: alguien me podria dar algun ejemplo lo suficientemente ilustrativo de
> este excelente mecanismo? quiero decir: como trasladar, transmitir, mantener
> una variable desde una pagina donde inicio una session hasta otra en la que
> la cierro, pasando por otras tantas paginas como sea posible?
>
> como identifico la session en otras de esas paginas subsiguientes a la pag
> donde inicie la session?
>
> gracias de antemano
>
> frodo
> --
> Viva Fraggle Rock!!!
>
>
> --
> Este mensaje ha sido analizado por MailScanner en JVR
> en busca de virus y otros contenidos peligrosos,
> y se considera que está limpio.
>
> --
> PHP Spanish Localization Talk Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>

Haré algunas precisiones:

1- Las sesiones se utilizan para identificar a un usuario de otro. Los
servidores HTTP como Apache responden con una página Web cuando se les pide un
URL que la contenga, así cuando pides por ejemplo
"http://floss.linuxbaja.org/" mi servidor te responde con la página
correspondiente. Sin embargo, no hay manera de identificar a un mismo usuario
que se mueve entre distintas página sin utilizar sesiones (o un mecanismo
similar).

2- PHP tiene integrado un sistema para el manejo de sesiones utilizando la
función session_start(). Este sistema identifica a cada usuario por separado
asignándole una identificación de sesión (SID) a través de una galleta
(cookie), que es un miniarchivo de texto que se graba en el browser que visita
la página. Si acaso el visitante a tu página Web tiene deshabilitadas las
cookies (se creía hace tiempo que servían para hackearte la computadora, y
algunas personas aún siguen creyéndolo) entonces el sistema de sesiones de
PHP agrega a todo link en tu página una variable de tipo GET de la forma
&PHPSSID=XXXXXXXXX donde las X representan el valor aleatorio del SID.

3- Cada página que desees que maneje sesiones (generalmente TODAS las de un
website) debe tener ANTES de que cualquier caracter sea enviado al browser
(esto es, al inicio de tu scrip PHP) los siguientes comandos:

// Iniciando sesiones
session_start();
header("Cache-control: private");

la segunda línea no es obligatoria, pero corrige un problema que tiene el
Internet Explorer de Microsoft donde marca sesión expirada si le das "atrás"
(back) a tu navegador. Así entonces, cuando un usuario llega a tu sitio por
primera vez la función a) detecta que no tiene una cookie de sesión válida y
b) asigna una variable de sesión aleatoria. Las sesiones expiran después de
cierto tiempo, como puedes ver en tu php.ini. Esto es debido a que un usuario
se puede ir sin avisar, y si no expiraran habría muchas sesiones muertas
abiertas.

4- Ya tieniendo a un usuario identificado por medio de un SID el
servidor puede
guardar variables de sesión relacionadas con ese SID. Estas variables
generalmente las guarda en un directorio temporal (/tmp en Linux) pues tienen
en esencia una vida limitada. Así entonces, puedes tener una serie de
formularios preguntándole a un usuario diferentes datos, e ir acumulando sus
respuestas dentro de diferentes variables de sesión. Este es el mecanismo
básico de un carrito de compras por internet, por ejemplo. PHP incluye
también un mecanismo de limpieza ajustable que borra las variables de sesión
que no sirven.

5- Un ejemplo sencillo del uso de sesiones puede ser el acceso a un lugar
restringido de tu sitio, donde un usuario se tiene que identificar:
   a) Utilizando sesiones a cada visitante que llegue a tu página se le
asignará un SID si no tiene uno válido, independientemente de si es un
usuario con acceso o no.
   b) En el lugar que te parezca adecuado pones tu formulario de acceso donde
ingresan su nombre de usuario y contraseña, y el script de PHP que lo recibe y
que valida contra una base de datos si la combinación de nombre/contraseña
son válidos le asigna un valor a un usuario que ha sido aprobado de acceso,
digamos $_SESSION['aprobado']=1;.
   c) En cada página de tu sitio al inicio revisas que exista esa variable
if(isset($_SESSION['aprobado']) y le das la salida correspondiente a quien se
identificó correctamente.
   d) Si acaso alguien quiere entrar sin haber sido validado envías la salida
correspondiente tipo else{echo "necesitas registrarte";} o lo que te parezca.
   e) Cuando un usuario termine de trabajar en el área restringida y presiona
por ejemplo un botón de "Salir" el script que lo procesa utiliza
session_unset(); para elminar todas las variables de sesión que existan para
esa SID. Así aparecerá como no identificado pues $_SESSION['aprobado']
desaparecerá.
   f) Si un usuario es descuidado y no sale del sistema utilizando el botón
correspondiente, la sesión expirará pasado el tiempo indicado en el php.ini
en session.cache_expire, que por default está ajustado a 180 minutos, pero que
puedes ajustar a tu necesidad. Expirando la sesión el usuario queda
efectivamente fuera.
   g) Si lo que sucedió es que se retiró de su computadora y regresa,
aplicará lo indicado en el inciso a), donde al no tener un SID válido (porque
ya expiró) se le asignará uno nuevo.

Es importante que notes que las variables de sesión son referidas como
$_SESSION con mayúsculas.

Bueno, espero te sirva tanto rollo.

Saludos.

-- 
Vladimir Hernández
http://linuxbaja.org/
-- 
PHP Spanish Localization Talk Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


Este archivo fue generado por hypermail 2.1.7 : sáb 18 mar 2006 - 18:23:49 CET