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
Configurazione di Runtime
Il comportamento di queste funzioni è influenzato dalle impostazioni di php.ini.
| Name | Default | Modificabile | Changelog |
|---|---|---|---|
| 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 | Disponibile dal 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 | Disponibile dal PHP 4.0.4. |
| session.cookie_httponly | "" | PHP_INI_ALL | Disponibile dal PHP 5.2.0. |
| session.use_cookies | "1" | PHP_INI_ALL | |
| session.use_only_cookies | "1" | PHP_INI_ALL | Disponibile dal 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 in PHP <= 4.2.3. PHP_INI_PERDIR in PHP <= 4-cvs. Disponibile dal PHP 4.0.3. |
| session.bug_compat_42 | "1" | PHP_INI_ALL | Disponibile dal PHP 4.3.0. |
| session.bug_compat_warn | "1" | PHP_INI_ALL | Disponibile dal PHP 4.3.0. |
| session.hash_function | "0" | PHP_INI_ALL | Disponibile dal PHP 5.0.0. |
| session.hash_bits_per_character | "4" | PHP_INI_ALL | Disponibile dal PHP 5.0.0. |
| url_rewriter.tags | "a=href,area=href,frame=src,form=,fieldset=" | PHP_INI_ALL | Disponibile dal PHP 4.0.4. |
The session management system supports a number of configuration options which you can place in your php.ini file. We will give a short overview.
- session.save_handler string
- session.save_handler definisce il nome dell'handler che è utilizzato per salvare e caricare i dati associati alla sessione. Il default è files. Si noti che le singole estensioni postono registrare i propri save_handler; gli handler registrati possono essere ottenuti per una specifica installazione consultando phpinfo(). Vedere anche session_set_save_handler().
- session.save_path string
-
session.save_path definisce l'argomento che
è passato all'handler di salvataggio. Se si sceglie l'handler di default
files, questo è il percorso in cui i file sono creati. Vedere anche
session_save_path().
C'è un argomento N opzionale per questa direttiva che determina il numero di livelli di carelle su cui verranno distribuiti i file di sessione. Per esempio, impostarlo a '5;/tmp' può portare a creare un file di sessione con questo percorso: /tmp/4/b/1/e/3/sess_4b1e384ad74619bd212e236e52a5a174If . Per usare N occorre creare tutte queste cartelle prima dell'utilizzo. Un piccolo shell script è presente in ext/session per eseguire questo lavoro, si chiama mod_files.sh. Notare anche che se N è usato ed è maggiore di 0 il garbage collection automatico non sarà eseguito, vedere un php.ini per ulteriori informazioni. Inoltre, se si usa N, assicurarsi di racchiudere session.save_path in "doppie virgolette" poiché il separatore (;) è usato anche per i commenti in php.ini.
AvvisoSe si lascia questo parametro impostato su una cartella leggibile da tutti, come /tmp (il default), altri utenti sul server possono abusare delle informazioni delle sessioni ottenendo la lista dei file in quella cartella.
Nota: Prima del PHP 4.3.6, gli utenti di Windows dovevano cambiare questa variabile per utilizzare le sessioni di PHP. Un percorso valido deve essere specificato, es.: c:/temp.
- session.name string
- session.name specifica il nome della sessione usato come nome del cookie. Dovrebbe contenere solamente caratteri alfanumerici. Il valore predefinito è PHPSESSID. Vedere anche session_name().
- session.auto_start boolean
- session.auto_start specifica se il modulo di sessione inizia automaticamente una sessione al momento della richiesta. Il valore predefinito è 0 (disabilitato).
- session.serialize_handler string
- session.serialize_handler definisce il nome dell'identificativo usato per serializzare/deserializzare i dati. Attualmente sono supportati un formato interno (nome php o php_binary) e WDDX (nome wddx). WDDX è disponibile solo se PHP è compilato con il supporto WDDX . Il valore predefinito è php.
- session.gc_probability integer
- session.gc_probability in combinazione con session.gc_divisor è usato per gestire la probabilità che la routine gc (garbage collection) venga eseguita. Il valore predefinito è 1. Vedere session.gc_divisor per i dettagli.
- session.gc_divisor integer
- session.gc_divisor in conmbinazione con session.gc_probability definisce la probabilità che la routine gc (garbage collection) venga eseguita ad ogni inizializzazione di sessione. La probabilità è calcolata usando gc_probability/gc_divisor, es. 1/100 significa che c'è la probabilità del 1% che il processo GC parta ad ogni richiesta. session.gc_divisor ha come valore predefinito 100.
- session.gc_maxlifetime integer
-
session.gc_maxlifetime specifica il numero
di secondi dopo i quali i dati verranno visti come 'spazzatura' e
quindi ripuliti. La ripulitura (Garbage Collection) avviene durante l'avvio della sessione.
Nota: Se differenti script hanno differenti valori di session.gc_maxlifetime ma condividono lo stesso spazio di memorizzazione dei dati di sessione allora lo script con il valore minimo sarà quello che ripulirà i dati. In questo caso, utilizzare la direttiva assieme a session.save_path.
Nota: Se si sta usando l'handler di sessione predefinito basato su file, il filesystem deve tener traccia degli orari di accesso (atime). Il filesystem FAT di Windows non lo fa, quindi occorre trovare un altro modo per gestire il garbage collecting della sessione se si è obbligati ad usare FAT o qualsiasi altro filesystem dove atime non è disponibile. Dal PHP 4.2.3 viene usato mtime (orario di modifica) invece di atime. In questo modo non ci sono problemi con filesystem dove l'atime non è disponibile.
- session.referer_check string
- session.referer_check contiene la sottostringa che si vuole cercare nel HTTP Referer. Se il Referer è stato inviato dal client e la sottostringa non viene trovata, il session id incorporato viene segnato come non valido. Il valore predefinito è la stringa vuota.
- session.entropy_file string
- session.entropy_file fornisce il percorso a una resource esterna (file) che sarà usaro come una fonte addizionale di entropia nel processo di creazione del session id. Esempi sono /dev/random o /dev/urandom che sono disponibili in molti sistemi Unix.
- session.entropy_length integer
- session.entropy_length specifica il numero di bytes che saranno letti dal file specificato qui sopra. Il valore predefinito è 0 (disabilitato).
- session.use_cookies specifica se il modulo userà i cookie per salvare il session id sul client Il valore predefinito è 1 (abilitato).
- session.use_only_cookies specifica se il modulo userà solo i cookie per salvare il session id sul client. L'abilitazione di questa impostazione previene gli attacchi che passano session id nelle URL. Questa impostazione è stata aggiunta in PHP 4.3.0. Il valore predefinito è 1 (abilitato) dal PHP 6.0.
-
session.cookie_lifetime specifica il tempo di vita del
in secondi del cookie inviato al browser. Il valore 0
significa "finché il browser viene chiuso". Il valore predefinito è
0. Vedere anche
session_get_cookie_params() e
session_set_cookie_params().
Nota: La marca oraria di scadenza è impostata relativamente all'orario del server, che non è necessariamente lo stesso di quello del browser.
- session.cookie_path specifica il percorso da impostare nel session_cookie. Il valore predefinito è /. Vedere anche session_get_cookie_params() e session_set_cookie_params().
- session.cookie_domain specifica il dominio da impostare nel session_cookie. Il valore predefinito è vuoto, che corridponde al nome dell'host del server che ha generato il cookie, secondo le specifiche dei cookie. Vedere anche session_get_cookie_params() e session_set_cookie_params().
- session.cookie_secure specifica se i cookie devono essere mandati solo su connessioni sicure. Il valore predefinito è off. Questa impostazione è stata aggiunta in PHP 4.0.4. Vedere anche session_get_cookie_params() e session_set_cookie_params().
- Contrassegna il cookie come accessibile solo attraverso il protocollo HTTP. Questo significa che il cookie non sarà accessibile dai linguaggi di scripting, come JavaScript. Questa impostazione aiuta efficacemente a ridurre i furti di identità attraverso attacchi XSS (anche se non è accettato da tutti i browser).
- session.cache_limiter string
- session.cache_limiter specifica il metodo di controllo della cache da usare per le pagine di sessione (none/nocache/private/private_no_expire/public). Il valore predefinito è nocache. Vedere anche session_cache_limiter().
- session.cache_expire integer
- session.cache_expire specifica il tempo di vita in minuti delle pagine di sessione, non ha effetto se il cache_limiter è nocache. Il valore predefinito è 180. Vedere anche session_cache_expire().
- session.use_trans_sid boolean
-
session.use_trans_sid Specifica se il supporto trasparente
del sid è abilitato o no. Il valore predefinito è
0 (disabled).
Nota: Per PHP 4.1.2 e precedenti, è abilitato compilando con --enable-trans-sid. Dal PHP 4.2.0, trans-sid è sempre compilata. La gestione della sessione basata sulle URL ha dei rischi di sicurezza maggiori rapportata alla gestione basata sui cookie. Per esempio, gli utenti possono inviare una URL che contiene un ID di sessione attivo ai proprio amici via email oppure gli utenti possono salvare una URL che contiene un ID di sessione nei preferiti ed accedere al sito sempre con lo stesso ID.
- session.bug_compat_42 boolean
- PHP 4.2.3 e precedenti hanno una funzionalità/bug non documentata che permette di inizializzare una variabile di sessione nello scope globale, anche se register_globals è disabilitato. PHP 4.3.0 e successivi mostrano un avviso, se questa funzionalità è utilizzata, e se session.bug_compat_warn è pure abilitato. Questa funzionalità/bug può essere spenta disabilitando questa direttiva.
- session.bug_compat_warn boolean
- PHP 4.2.3 e precedenti hanno una funzionalità/bug non documentata che permette di inizializzare una variabile di sessione nello scope globale, anche se register_globals è disabilitato. PHP 4.3.0 e successivi mostrano un avviso, se questa funzionalità è utilizzata abilitando sia session.bug_compat_42 che session.bug_compat_warn.
- session.hash_function mixed
-
session.hash_function permete di specificare l'algoritmo di hashing
usato per generare l'ID di sessione. '0' significa MD5 (128 bit) e
'1' significa SHA-1 (160 bit).
Dal PHP 6.0.0 è possibile anche specificare uno degli algoritmi forniti dall'estensione hash (se è disponibile), come sha512 o whirlpool. Una lista completa degli algoritmi disponibili può essere ottenuta con la funzione hash_algos().
Nota: This was introduced in PHP 5.
- session.hash_bits_per_character integer
-
session.hash_bits_per_character permette di definire
quanti bit sono memorizzati in ogni carattere quando si converte il dato binario
dell'hash in forma leggibile. I valori possibile sono '4' (0-9, a-f),
'5' (0-9, a-v), e '6' (0-9, a-z, A-Z, "-", ",").
Nota: Questo è stato introdotto in PHP 5.
-
url_rewriter.tags specifica quali tag HTML
sono riscritti per includere l'ID di sessione se il supporto trasparente del SID
è abilitato. Il valore predefinito è
a=href,area=href,frame=src,input=src,form=fakeentry,fieldset=
Nota: Se si desidera la conformità stretta a HTML/XHTML, rimuovere l'elemento form e usare il tag <fieldset> attorno ai campi della form.
Le impostazioni di configurazione track_vars e register_globals influenzano come le variabili di sessione sono salvate e caricate.
Nota: Dal PHP 4.0.3, track_vars è sempre attivo.
Configurazione di Runtime
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!
