Foros del Web » Programando para Internet » PHP »

Guardar variables de sesión en archivo plano

Estas en el tema de Guardar variables de sesión en archivo plano en el foro de PHP en Foros del Web. Me gustaría que antes de cerrar la sesión las variables de sesión se quedarán guardadas en un archivo de texto y que la siguiente vez ...
  #1 (permalink)  
Antiguo 04/11/2003, 10:06
 
Fecha de Ingreso: octubre-2003
Mensajes: 109
Antigüedad: 20 años, 6 meses
Puntos: 1
Guardar variables de sesión en archivo plano

Me gustaría que antes de cerrar la sesión las variables de sesión se quedarán guardadas en un archivo de texto y que la siguiente vez que mi usuario se autentificase volviese al mismo estado en el que se quedó la última vez que visitó la página.

¿Alguna idea? Llevo un rato buscando algo para tirar del hilo y no he encontrado nada que me diese un pista.

Gracias
  #2 (permalink)  
Antiguo 04/11/2003, 10:22
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Bueno .. pues sólo tienes que guardar el array $_SESSION como tal de tu usuario y ponerle de nombre al archivo el ID (identificativo) de tu usuario.

Al restaurar la sesión solo tienes que leer el archivo de texto plano hacia un string y volcar su contenido en $_SESSION.

Solo recuerda que las sesiones se guardan serializadas (por si tienes porblemas por ahí).

Otro detalle .. La sesión en sí (por defecto) crea un archivo .. este archivo no es eliminado hasta que el proceso de "garbage" (basura) es iniciado .. pese que el ID de sesión no sea ya válido por expirar la sesión .. Con esto quiero decir que, podrías ajustar los tiempos de expiración de la sesión y del "garbage" para que sólo te guardes el SID de la sesión de tu usuario .. y la próxima vez que tu usuario entre a tu sistema .. inicias la sesión con el ID que tienes guardado (vía session_id($tu_id) ) ...

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.

Última edición por Cluster; 04/11/2003 a las 10:25
  #3 (permalink)  
Antiguo 04/11/2003, 10:30
 
Fecha de Ingreso: octubre-2003
Mensajes: 109
Antigüedad: 20 años, 6 meses
Puntos: 1
Gracias Cluster

Me acabo de dar de cuenta que llevo un rato perdiendo el tiempo con algo que ya sabía hacer. Me ha liado leer tanta literatura sobre el temporal que guarda el servidor y todas esas cosas...
  #4 (permalink)  
Antiguo 04/11/2003, 10:36
 
Fecha de Ingreso: octubre-2003
Mensajes: 109
Antigüedad: 20 años, 6 meses
Puntos: 1
... pero el último párrafo

no entiendo lo que quieres decir:

<Otro detalle .. La sesión en sí (por defecto) crea un archivo .. <este archivo no es eliminado hasta que el proceso de "garbage"

te refieres al temporal del servidor? a la cookie en el cliente?

<(basura) es iniciado .. pese que el ID de sesión no sea ya válido <por expirar la sesión .. Con esto quiero decir que, podrías <ajustar los tiempos de expiración de la sesión y del "garbage" <para que sólo te guardes el SID de la sesión de tu usuario ..

cómo se ajustan esos tiempos?

< y la <próxima vez que tu usuario entre a tu sistema .. inicias la <sesión con el ID que tienes guardado (vía session_id($tu_id) ) ...

esto quiere decir primero iniciar la sesión, abrir el archivo, leer y convertir las variables en variables de sesión?


Gracias de nuevo
  #5 (permalink)  
Antiguo 04/11/2003, 10:46
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
no entiendo lo que quieres decir:

<Otro detalle .. La sesión en sí (por defecto) crea un archivo .. <este archivo no es eliminado hasta que el proceso de "garbage"

te refieres al temporal del servidor? a la cookie en el cliente?
Me refiero al temporal del servidor y que si usas propagación del SID por cookies .. esa cookie guarda la referencia del SID en la cookie.

Cita:
<(basura) es iniciado .. pese que el ID de sesión no sea ya válido <por expirar la sesión .. Con esto quiero decir que, podrías <ajustar los tiempos de expiración de la sesión y del "garbage" <para que sólo te guardes el SID de la sesión de tu usuario ..

cómo se ajustan esos tiempos?
Vía php.ini o .htaccess o ini_set() directivas:

"expiración" (paso ese tiempo el SID no será valido y pasará al modo "basura" en espera de ser borrado fisicamente el archivo de sesión):
session.gc_maxlifetime = 1440

"garbage" = Porcentaje de veces que se inicia una sesión vía session_start() ...:

session.gc_probability = 1
session.gc_divisor = 100 (sólo para PHP 4.3.0 en adelante)

También tiene sus equivalentes para la cookie (si usas propagación del SID en cookie):

session.cookie_lifetime = 0


Cita:
< y la <próxima vez que tu usuario entre a tu sistema .. inicias la <sesión con el ID que tienes guardado (vía session_id($tu_id) ) ...
esto quiere decir primero iniciar la sesión, abrir el archivo, leer y convertir las variables en variables de sesión?
Si el archivo de sesión todavía está vigente (no expiró ajustanto las directivas que mencioné) .. podrías sólo guardarte el SID de la sesión en tu archivo de texto plano.

El inicio de esas sesiones sería:

Código PHP:
<?
session_start
();
session_id($tu_id_session);

// y a usar tus variables de sesión como lo haces actualmente.
?>
Pero, OJO .. Si el SID de sesión lo propagas por el URL .. sería potencialmente inseguro este sistema .. Imagina que por A o B motivo le llega un link de ese usuario con el SID activo y válido ... Entraría sin problemas a la sesión .. pues es válida. Aunque, parece que PHP 4.3.x en adelante verifica el HOST de quien creó la sesión .. así que si no es el mismo no lee la sesión (esto no recuerdo bien). La otra forma de solventar este problema es propagando el SID en cookies .. con las desventajas que tiene esto al obligar a tu usuario a permitir cookies en su navegador .. y los problemas de PC's comparidos (lease cibercafes, instituciones .. etc).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.

Última edición por Cluster; 04/11/2003 a las 10:51
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:10.