After having many problems with garbage collection not clearing my sessions I have resolved it through the following.
First I found this in the php.ini (not something i noticed as i use phpinfo(); to see my hosting ini).
; NOTE: If you are using the subdirectory option for storing session files
; (see session.save_path above), then garbage collection does *not*
; happen automatically. You will need to do your own garbage
; collection through a shell script, cron entry, or some other method. ; For example, the following script would is the equivalent of
; setting session.gc_maxlifetime to 1440 (1440 seconds = 24 minutes):
; cd /path/to/sessions; find -cmin +24 | xargs rm
With this is mind there are options.
1. dont use a custom save_path.
** This means if your isp hasnt defaulted your session temp to something safer than install default or you are using a shared directory for session data then you would be wise to use named sessions to keep your session from being viewable in other people's scripts. Creating a unique_id name for this is the common method. **
2. use your custom folder but write a garbage collection script.
3. use a custom handler and a database
Configuración en tiempo de ejecución
El comportamiento de estas funciones está afectado por los valores definidos en php.ini.
| Nombre | Predeterminado | Modificable | Cambios |
|---|---|---|---|
| session.save_path | "/" | PHP_INI_ALL | |
| session.name | "PHPSESSID" | PHP_INI_ALL | |
| session.save_handler | "files" | PHP_INI_ALL | |
| session.auto_start | "0" | PHP_INI_ALL | |
| session.gc_probability | "1" | PHP_INI_ALL | |
| session.gc_divisor | "100" | PHP_INI_ALL | Disponible desde PHP 4.3.2. |
| session.gc_maxlifetime | "1440" | PHP_INI_ALL | |
| session.serialize_handler | "php" | PHP_INI_ALL | |
| session.cookie_lifetime | "0" | PHP_INI_ALL | |
| session.cookie_path | "/" | PHP_INI_ALL | |
| session.cookie_domain | "" | PHP_INI_ALL | |
| session.cookie_secure | "" | PHP_INI_ALL | Disponible desde PHP 4.0.4. |
| session.cookie_httponly | "" | PHP_INI_ALL | Disponible desde PHP 5.2.0. |
| session.use_cookies | "1" | PHP_INI_ALL | |
| session.use_only_cookies | "1" | PHP_INI_ALL | Disponible desde PHP 4.3.0. |
| session.referer_check | "" | PHP_INI_ALL | |
| session.entropy_file | "" | PHP_INI_ALL | |
| session.entropy_length | "0" | PHP_INI_ALL | |
| session.cache_limiter | "nocache" | PHP_INI_ALL | |
| session.cache_expire | "180" | PHP_INI_ALL | |
| session.use_trans_sid | "0" | PHP_INI_ALL | PHP_INI_ALL en PHP <= 4.2.3. PHP_INI_PERDIR en PHP < 5. Disponible desde PHP 4.0.3. |
| session.bug_compat_42 | "1" | PHP_INI_ALL | Disponible desde PHP 4.3.0. Eliminada en PHP 6.0.0. |
| session.bug_compat_warn | "1" | PHP_INI_ALL | Disponible desde PHP 4.3.0. Eliminada en PHP 6.0.0. |
| session.hash_function | "0" | PHP_INI_ALL | Disponible desde PHP 5.0.0. |
| session.hash_bits_per_character | "4" | PHP_INI_ALL | Disponible desde PHP 5.0.0. |
| url_rewriter.tags | "a=href,area=href,frame=src,form=,fieldset=" | PHP_INI_ALL | Disponible desde PHP 4.0.4. |
El sistema de gestión de sesiones soporta un número de opciones de configuración que puede ubicar en su archivo php.ini. Le daremos una breve introducción.
- session.save_handler string
- session.save_handler define el nombre del gestor que es usado para almacenar y recuperar datos asociados con una sesión. Su valor predeterminado es files. Note que extensiones individuales pueden registrar sus propios gestores save_handler; los gestores registrados pueden consultarse en una instalación específica refiriéndose a phpinfo(). Vea también session_set_save_handler().
- session.save_path string
-
session.save_path define el argumento que es pasado
al gestor de guardado. Si elige el gestor de archivos predeterminado,
ésta es la ruta hacia donde son creados los archivos. Vea también
session_save_path().
Existe un argumento opcional N a esta directiva que determina el número de niveles de directorio en los que serán repartidos sus archivos de sesión. Por ejemplo, al definir este valor como '5;/tmp' puede terminar creando un archivo de sesión y una ubicación como /tmp/4/b/1/e/3/sess_4b1e384ad74619bd212e236e52a5a174If. Para poder usar N, debe crear todos estos directorios antes de su uso. Un pequeño script de intérprete de comandos existe en ext/session para este efecto, se llama mod_files.sh. También note que si N es usado y es mayor que 0, entonces la recolección de basura automática no será implementada, vea una copia de php.ini para más información. Asimismo, si usa N, asegúrese de rodear session.save_path de "comillas", ya que el separador (;) es usado también para denotar comentarios en php.ini.
WarningSi deja este valor asignado a un directorio con permisos globales de lectura, como /tmp (el valor predeterminado), puede que otros usuarios en el servidor puedan abusar de la información de las sesiones, obteniendo la lista de archivos en tal directorio.
Note: Antes de PHP 4.3.6, los usuarios de Windows debían modificar esta variable para poder usar las funciones de sesiones de PHP. Debe especificarse una ruta válida, p.ej.: c:/temp.
- session.name string
- session.name especifica el nombre de la sesión que es usada como nombre de cookie. Debería contener únicamente caracteres alfanuméricos. Su valor predeterminado es PHPSESSID. Vea también session_name().
- session.auto_start boolean
- session.auto_start especifica si el módulo de sesión inicia una sesión automáticamente al comienzo de una petición. Su valor predeterminado es 0 (deshabilitado).
- session.serialize_handler string
- session.serialize_handler define el nombre del gestor que es usado para seriar/revertir la seriación de datos. En la actualidad, un formato interno de PHP (de nombre php) y WDDX son soportados (de nombre wddx). WDDX se encuentra disponible únicamente si PHP ha sido compilado con soporte WDDX. Su valor predeterminado es php.
- session.gc_probability integer
- session.gc_probability, en conjunto con session.gc_divisor, es usado para manejar la probabilidad de que la rutina de recolección de basura se inicie. Su valor predeterminado es 1. Vea session.gc_divisor para más detalles.
- session.gc_divisor integer
- session.gc_divisor, junto con session.gc_probability, define la probabilidad de que el proceso de recolección de basura inicie en cada arranque de sesión. La probabilidad es calculada usando gc_probability/gc_divisor, p.ej. 1/100 quiere decir que existe un 1% de probabilidad de que el proceso de recolección inicie para cada petición. El valor predeterminado de session.gc_divisor es 100.
- session.gc_maxlifetime integer
-
session.gc_maxlifetime especifica el número de
segundos luego de los cuales los datos son vistos como 'basura', y son
limpiados. La recolección de basura ocurre durante el comienzo de
sesión.
Note: Si diferentes scripts tienen diferentes valores de session.gc_maxlifetime pero comparten el mismo sitio de almacenamiente de datos de sesión, entonces el script con el valor mínimo estará limpiando los datos. En este caso, use esta directiva junto con session.save_path.
Note: Si se encuentra usando el gestor de sesiones basado en archivos predeterminado, su sistema de archivos debe llevar cuenta de los tiempos de acceso (atime). El sistema FAT de windows no lo hace, así que tendrá que implementar otra manera de gestionar la recolección de basura en sus sesiones si está atascado con un sistema de archivos FAT, o cualquier otro sistema de archivos en donde no se encuentre disponible el manejo de valores atime. A partir de PHP 4.2.3, se ha usado mtime (fecha de modificación) en lugar de atime. De este modo, usted no tendrá problemas con sistemas de archivos en donde el rastreo de atime no se encuentra disponible.
- session.referer_check string
- session.referer_check contiene la subcadena con la que desea chequear cada Referer HTTP. Si el Referer fue enviado por el cliente y la subcadena no fue encontrada, la id de sesión embebida será marcada como inválida. Su valor predeterminado es una cadena vacía.
- session.entropy_file string
- session.entropy_file entrega una ruta al recurso externo (archivo) que será usado como fuente adicional de entropía en el proceso de creación de ids de sesión. Ejemplos de este valor son /dev/random o /dev/urandom, los cuales están disponibles en muchos sistemas Unix.
- session.entropy_length integer
- session.entropy_length especifica el número de bytes que serán leídos desde el archivo especificado anteriormente. Su valor predeterminado es 0 (deshabilitado).
- session.use_cookies especifica si el módulo usará cookies para almacenar el id de sesión en el lado del cliente. Su valor predeterminado es 1 (habilitado).
- session.use_only_cookies indica si el módulo debe usar cookies únicamente para almacenar el id de sesión en el lado del cliente. Al habilitar este parámetro, se previenen ataques que involucran el paso de ids de sesión en URLs. Este parámetro fue añadido en PHP 4.3.0. Su valor predeterminado es 1 (habilitado) desde PHP 6.0.
-
session.cookie_lifetime especifica el tiempo de vida
de la cookie enviada al navegador, en segundos. El valor 0 quiere decir
"hasta que el navegador sea cerrado". Su valor predeterminado es
0. Vea también
session_get_cookie_params() y
session_set_cookie_params().
Note: La marca de tiempo de expiración es definida relativa a la hora del servidor, la cual no es necesariamente la misma que la hora en el navegador del cliente.
- session.cookie_path indica la ruta a definir en session_cookie. Su valor predeterminado es /. Vea también session_get_cookie_params() y session_set_cookie_params().
- session.cookie_domain especifica el dominio a definir en session_cookie. Su valor predeterminado es vacío, lo que quiere decir el nombre de host del servidor que generó la cookie, de acuerdo a la especificación de cookies. Vea también session_get_cookie_params() y session_set_cookie_params().
- session.cookie_secure especifica si las cookies deben ser enviadas sólamente a través de conexiones seguras. Su valor predeterminado es off. Este parámetro fue añadido en PHP 4.0.4. Vea también session_get_cookie_params() y session_set_cookie_params().
- Marca la cookie como accesible únicamente a través del protocolo HTTP. Esto quiere decir que la cookie no será accesible por lenguajes de scripting, tales como JavaScript. Este parámetro puede en efecto ayudar a reducir el robo de identidad por medio de ataques XSS (aunque no es soportado por todos los navegadores).
- session.cache_limiter string
- session.cache_limiter especifica el método de control de caché a usar para las páginas de sesión (none/nocache/private/private_no_expire/public). Su valor predeterminado es nocache. Vea también session_cache_limiter().
- session.cache_expire integer
- session.cache_expire especifica el valor time-to-live para páginas de sesión en caché, en minutos. Este valor no tiene efecto sobre el límite nocache. Su valor predeterminado es 180. Vea también session_cache_expire().
- session.use_trans_sid boolean
-
session.use_trans_sid indica si el soporte de sid
transparente es habilitado o no. Su valor predeterminado es
0 (dehabilitado).
Note: Para PHP 4.1.2 o versiones anteriores, este valor es habilitado al compilar con --enable-trans-sid. A partir de PHP 4.2.0, la característica trans-sid es compilada siempre. El manejo de sesiones basadas en URL tiene riesgos de seguridad adicionales comparado con el manejo de sesiones basadas en cookies. Los usuarios pueden enviar una URL que contenga una ID de sesión activa a sus amigos por correo electrónico, o los usuarios pueden guardar una URL que contiene una ID de sesión en sus marcadores, y acceder a su sitio siempre con el mismo ID de sesión, por ejemplo.
- session.bug_compat_42 boolean
- Las versiones de PHP 4.2.3 y anteriores tienen una característica/fallo no documentado que consiste en permitirle inicializar una variable de sesión en el contexto global, aun cuando register_globals se encuentre deshabilitado. PHP 4.3.0 y versiones posteriores le advertirán, si esta característica es usada, y si el parámetro session.bug_compat_warn se encuentra asimismo habilitado. Esta característica/fallo puede deshabilitarse mediante esta directiva.
- session.bug_compat_warn boolean
- Las versiones de PHP 4.2.3 y anteriores tienen una característica/fallo no documentado que consiste en permitirle inicializar una variable de sesión en el contexto global, aun cuando register_globals se encuentre deshabilitado. PHP 4.3.0 y versiones posteriores le advertirán, si esta característica es usada al habilitar tanto session.bug_compat_42 como session.bug_compat_warn.
- session.hash_function mixed
-
session.hash_function le permite especificar el
algoritmo hash usado para generar las IDs de sesión. '0' quiere decir
MD5 (128 bits) y '1' quiere decir SHA-1 (160 bits).
A partir de PHP 6.0.0 es posible también especificar cualquiera de los algoritmos ofrecidos por la extensión hash (si está disponible), como sha512 o whirlpool. Una lista completa de los algoritmos soportados puede consultarse con la función hash_algos().
Note: Este valor fue introducido en PHP 5.
- session.hash_bits_per_character integer
-
session.hash_bits_per_character le permite definir
cuántos bits son almacenados en cada caracter cuando se convierten los
datos binarios de hash hacia algo legible. Los valores posibles son '4'
(0-9, a-f), '5' (0-9, a-v), y '6' (0-9, a-z, A-Z, "-", ",").
Note: Este valor fue introducido en PHP 5.
-
url_rewriter.tags especifica cuáles etiquetas HTML
son rescritas para incluir la id de sesión si el soporte transparente
de sids se encuentra habilitado. Su valor predeterminado es
a=href,area=href,frame=src,input=src,form=fakeentry,fieldset=.
Note: Si desea conservar conformidad con el estándar HTML/XHTML estricto, retire la entrada form y use las etiquetas <fieldset> alrededor de sus campos de formulario.
Los parámetros de configuración track_vars y register_globals afectan el modo en que las variables de sesión son almacenadas y recuperadas.
Note: A partir de PHP 4.0.3, track_vars se encuentra habilitado siempre.
Configuración en tiempo de ejecución
25-Jun-2008 03:36
24-Jun-2008 03:05
To get session IDs to show up in URIs, and not get stored via cookies, you must not only set session.use_cookies to 0, but also set session.use_trans_sid to 1. Otherwise, the session ID goes neither in a cookie nor in URIs!
