
Originariamente inviata da
cronenborg
Se può servirti ti porto la mia esperienza in merito:
tempo fa decisi di cambiare metodo di storing delle sessioni php dal default a un sistema più flessibile.
Così trovai un workaround (che incollo) per storare le sessioni in una directory del server accessibile ai miei script.
Questa soluzione mi dava alcuni vantaggi:
- occupa meno risorse di un DB
- i files di sessione creati sono accessibili agli script php
di seguito il codice php per effettuare questa operazione e poi il seguito della storia:
Codice PHP:
$cookieExpireTime = 60*60*24*7; // 7 giorni
session_set_cookie_params($cookieExpireTime,'/','.nomedominio.com');
$Lifetime = $cookieExpireTime;
$Separator = (strstr(strtoupper(substr(PHP_OS, 0, 3)), "WIN")) ? "\\" : "/";
$DirectoryPath = dirname(__FILE__) . "{$Separator}SessionData";
is_dir($DirectoryPath) or mkdir($DirectoryPath, 0755);
if (ini_get("session.use_trans_sid")==true){
ini_set("url_rewriter.tags","");
ini_set("session.use_trans_sid",false);
}
ini_set("session.gc_maxlifetime",$Lifetime);
ini_set("session.gc_divisor", "2");
ini_set("session.gc_probability", "1");
ini_set("session.cookie_lifetime", "0");
ini_set("session.save_path", $DirectoryPath);
define("SESSION_DATA_PATH",$DirectoryPath);
define("COOKIE_EXPIRE_TIME",$cookieExpireTime);
if (isset($_COOKIE["PHPSESSID"]))
{
session_id($_COOKIE["PHPSESSID"]);
}
session_start();
Lo script crea una directory SessioData nello stesso percorso del file php dove si trova questo script.
E la popola dei files di sessione generati da php. Ovvero riscrive le direttive di gestione delle sessioni di php forzandone la scrittura sulla directory indicata.
Inoltre gestisce il tempo di expiring delle sessioni facendo fare a php (inteso come eseguibile) tutto il lavoro di scrittura/modifica/cancellazione dei files di sessione, così come farebbe normalmente nella sua directory di default.
Questo workaround però si rivelò efficace solo per siti medio/piccoli o comunque in cui si creasse una sessione solo per un sottoinsieme molto piccolo degli utenti totali, ovvero solo per chi fosse loggato o in qualche modo avesse effettuato delle operazioni da storare.
Infatti in siti con migliaia di utenti contemporanei, tutti loggati, il sistema si rivelò fallace! Infatti il tempo di accesso alla directory SessionData diveniva sempre più alto all'aumentare degli utenti, soprattutto se il tempo di expiring delle sessioni era impostato nell'ordine di giorni.
Quindi alla fine ritornai sui miei passi capendo che php gestisce già in maniera più che ottimale le sessioni, quindi non serviva affatto gestire in proprio tutti quei files, ma bastava semplicemente far fare tutto a lui, eventualmente installando memcached per ottenere performances migliori.
Scusate la prolissità.