sulle sessioni

Mi sto avvicinando al php per esigenze lavorative. Sono una webdesigner freelance e per essere più completa (e quindi competitiva) ho deciso di sconfinare un poco dal mio campo...

Vengo al dunque. Ho notato che molti utilizzano un database per memorizzare i dati di sessione. Che vantaggio ha questa pratica? è più performante? è più sicura?

inviato 6 anni fa
Giulia
X 0 X

Php lavora molto bene con i database, specialmente col mysql tantè che per molti siti web un server LAMP è una scelta più che vincente.

Salvare i dati di sessione in un database secondo me semplicemente riduce il tempo di sviluppo di un applicativo, la delega della scrittura e del salvataggio dei dati la rimandi ad un database che può risiedere su un'altra macchina, non bisogna pensare alla quantità di spazio che si ha a disposizione, al rischio di perdita dati, al controllo della scrittura dei dati, al ritrovare e ricreare i dati...

Insomma il vantaggio di salvare i dati di una sessione credo sia equivalente ai vantaggi che si hanno nel salvare qualsiasi altro dato in un dabase.

Le sessioni non sempre contengono grandi quantità di dati, in questi casi non è necessario l'uso di database.

Ora spero che qualcun altro un po' più competente e con numeri alla mano possa risponderti, purtroppo non ho la possibilità tecnica di produrre al momento numeri.

risposto 6 anni fa
Mario Santagiuliana
X 0 X

Tenere i dati di sessione in un DB è una strategia per poter realizzare funzionalità del tipo elenco utenti attualmente on line

Unaltra situazione, piuttosto complessa, nella quale si utilizzano le sessioni su DB è quella che prevede una batteria di server web in una architettura a bilanciamento di carico. In questi casi le richieste degli utenti si distribuiscono in maniera trasparente sui diversi server. Se si utilizzassero le classiche sessioni su file system, i dati di sessione si sparpaglierebbero sui diversi server, a meno di usare un percorso di rete per la cartella delle sessioni. Ma comunque ci sarebbero troppi accessi concorrenti sugli stessi file. Si preferisce quindi usare un database per memorizzare i dati di sessione in modo che costituisca un unico luogo in cui salvare i dati, in grado di gestire gli accessi concorrenti.

Alcune configurazioni di server a bilanciamento di carico, dette sticky session, riescono però a vincolare una sessione utente su un unico server, in modo tale che sia sempre lo stesso server della batteria a soddisfare tutte le richieste effettuate da uno stesso utente. In questo caso non serve mettere le sessioni su DB.

Infine non va esclusa la possibilità di usare in queste circostanze, al posto del DB, sistemi come memcache, un sistema di memorizzazione distribuito basato esclusivamente sulla memoria RAM dei server.

In generale non vanno mai registrati troppi dati di sessione, indipendentemente dal tipo di storage utilizzato, a causa della serializzazione-deserializzazione necessaria.

 :bye:

risposto 6 anni fa
Gianni Tomasicchio
X 0 X

sbaglio o le sessioni sono più pesanti a livello di HD usato rispetto alla controparte DB? E anche i tempi di accesso di un file sono più lunghi rispetto ad una query - parlando sempre di dati uguali -.

Correggetemi se erro.

In questo caso, che intendi per serializzazione - deserializzazione??

risposto 6 anni fa
larchitetto
X 0 X

sbaglio o le sessioni sono più pesanti a livello di HD usato rispetto alla controparte DB? E anche i tempi di accesso di un file sono più lunghi rispetto ad una query - parlando sempre di dati uguali -.

Correggetemi se erro.

In questo caso, che intendi per serializzazione - deserializzazione??

E' poco corretto fare confronti tra l'accesso ai dati presenti in un file e l'interrogazione di un database. Anche se volessimo restringere il campo ai differenti modi di salvare i dati di sessione (file o db) non è affatto banale stabilire quale dei due metodi è più performante.

Se infatti l'accesso a semplici dati presenti in un file è più rapido dell'accesso per chiave ad un record su MySQL, le cose cambiano se in MySQL si attiva la cache oppure se si utilizzano tabelle di tipo MEMORY.

In altre parole, dipende...

Per quanto riguarda la serializzazione, i dati di sessione di PHP sono contenuti in un array ($_SESSION) che per sua natura può contenere i dati in maniera strutturata (coppie di chiavi => valori che a loro volta possono contenere altre chiavi associate ad altri valori). Questa organizzazione gerarchica non è compatibile con la memorizzazione in un file (o in un campo di testo del database) a meno di non rappresentare le informazioni organizzate in maniera gerarchica attraverso una stringa costituita non solo dai dati veri e propri ma anche da una simbologia che ne specifica la struttura, un po' quello che avviene nelle espressioni matematiche, in cui le varie parentesi danno un ordine (e una gerarchia) alle operazioni da eseguire.

La serializzazione è proprio il processo di conversione dei dati strutturati presenti nell'array in una stringa memorizzabile su file. La deserializzazione è esattamente il processo inverso, prende la stringa serializzata e ricostruisce l'array di partenza.

Se l'array è "grosso" e possiede una struttura complessa il processo di serializzazione / deserializzazione è oneroso.

 :bye:

risposto 6 anni fa
Gianni Tomasicchio
X 0 X

ah ok grazie, avevo spulciato una volta un file di sessione e trovavo infatti la gerarchia dell'array rappresentata su stringa.  :bye:

risposto 6 anni fa
larchitetto
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda