Foros del Web » Programando para Internet » PHP »

usando Garbage colector...

Estas en el tema de usando Garbage colector... en el foro de PHP en Foros del Web. Hola!! Vereís, he estado leyendo el manual de PHP.net porque tengo dudas sobre como eliminar las sesiones y he leido sobre el garbage colector (supongo ...
  #1 (permalink)  
Antiguo 21/07/2003, 11:50
 
Fecha de Ingreso: julio-2003
Ubicación: Sevilla
Mensajes: 86
Antigüedad: 20 años, 9 meses
Puntos: 0
Exclamación usando Garbage colector...

Hola!!

Vereís, he estado leyendo el manual de PHP.net porque tengo dudas sobre como eliminar las sesiones y he leido sobre el garbage colector (supongo que sera algo similar al de java).

Lo que quiero es que cuando un usuario cierre el navegador , su session se cierre y no se vayan acumulando en mi carpeta de sesiones tal y como me pasa ahora.

Habia pensado hacerlo con el evento onWindowClosed , pero no lo veo fiable.

¿Sabeís como gestionar la destrucción de sesiones eficazmente?

Muchas gracias a todos !!!



"Quiero saber de todo........y no se nada"
  #2 (permalink)  
Antiguo 21/07/2003, 14:49
 
Fecha de Ingreso: julio-2003
Mensajes: 165
Antigüedad: 20 años, 9 meses
Puntos: 1
Hola,

Bueno, antes que nada, sobre el recolector de basura que mencionan en el manual de PHP, éste no tiene relación con el mecanismo de recolección de basura de algunos lenguajes de programación (como Java, por ejemplo). La recolección de basura generalmente hace referencia a una característica relativamente "moderna" presente en algunos lenguajes de programación, mediante la cual se adiministra el uso de apuntadores y demás referencias de memoria que incluyen los programas, para ser posteriormente "reciclados", aliviando la labor del programador que de otro modo tendría que encargarse de todas esas referencias de memoria manualmente. En el manual de PHP hablan de otro tipo de basura, la información almacenada sobre las sesiones de los clientes.

Sobre cómo eliminar las sesiones eficazmente, supongo que ya conoces sobre las funciones correspondientes de que dispone PHP para la destrucción de sesiones. El problema es ¿cuándo destruir la información? Tratar de crear un mecanismo que lo haga cuando los usuarios cierren su navegador es difícil y las soluciones tienden a ser poco confiables. Personalmente se me ocurre que lo que podrías buscar es algo como una aplicación programada para que se ejecute cada cierto periodo de tiempo, y lo que haga sea limpiar la información de sesiones viejas en el servidor.

Por supuesto, la implementación de tal sistema depende directamente del modo en que funcionan las cosas en tu aplicación. Al menos es una opción que puedes considerar a la hora de dar con la respuesta que consideres más apropiada... :)
  #3 (permalink)  
Antiguo 21/07/2003, 19:09
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
En la misma documentación de php.net -> sesiones tienen la descripción de las directivas:

session.gc_maxlifetime

session.gc_probability
session.gc_divisor <-- sólo desde PHP 4.3.0 en adelante.

La primera determina cuando pasará un SID (Identificador Unico de sesión) a no ser válido (pasa al modo "garbage" .. osease, no es válido toda referencia a ese SID pero el "file" aun está creado en el sistema de archivos del servidor donde se almacenen las sesiones en caso de usar session.save_handler = files)

Si usamos tiempo "0" (segundos) en esa directiva .. en teoría la sesión "morirá" cuando se cierre el navegador ...

El resto .. " que pase el camión de la basura y borre los archivos" .. .lo determina las otras dos directivas (o 1 sólo dependiendo de la versión de PHP).

Esas directivas indican "cuando" pasará ese "camion de la basura" a borrar esos archivos físicamente del servidor .. Se expresa en porcentaje de veces que se ejecute un inicio de sesiones (cada vez que se haga un session_start() ..) por eso depende mucho de las condiciones reales de uso del sistema basado en sesiones que se use.

Si tienes "pánico" a que esas sesiones permanezcan demasiado tiempo en el sistema de archivos del servidor y no tienes acceso al "php.ini" como para cambiar el estado de esas directivas (ahora no recuerdo si con un ini_set() o .httpacces se pueden "setear" ..) puedes "llevarte" tus sesiones (archivos) a un directorio de tu sitio y borrarlo por tus própios scripts (hasta alguno que ejecutes bajo un CRON de sistema o similar) como si de cualquier archivo se tratase (haciendo un unlink()).

Esta "funcionalidad" la puedes controlar con la función:
session_save_path()

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #4 (permalink)  
Antiguo 22/07/2003, 10:27
 
Fecha de Ingreso: julio-2003
Ubicación: Sevilla
Mensajes: 86
Antigüedad: 20 años, 9 meses
Puntos: 0
Muchisimas gracias por las molestias.Me ha servido bastante vuestro comentario.

Supongo que lo que haré será configurar mi php.ini de forma correcta tal y como me has explicado Cluster, y además hacer algo(Ya pensare qué exactamente) en el cliente.

Lo de la aplicacion de sistema adicional para que haga el trabajo no es mala idea, he hecho cosa parecidas bajo linux, sin embargo en windows...¡ya veré como lo hago!


Muchas gracias de nuevo!!
Un saludo.
__________________
"Quiero saber de todo.....y no se nada"
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 14:51.