Come posso integrare e memorizzare sessioni nel mio database, invece di memorizzarle in un cookie e un file system?

4

Non ho mai lavorato con le sessioni in un database prima, e sono un po 'oscuro su come funzionano. Ho già creato una classe utente che memorizza le informazioni dell'utente: nome utente, password, e-mail ecc. Ho anche una sessione session che usa l'ID utente per memorizzare un cookie di sessione nel browser dell'utente in modo che quando ritornano all'applicazione, un metodo viene invocato per verificare se:

isset($_SESSION['id']){ $this->userId=$_SESSION['id']}

quindi porta l'utente alla pagina di amministrazione. Ho letto che usare il database è un metodo più sicuro per gestire le sessioni, ma sto attraversando un periodo difficile che mi ha avvolto attorno a questo concetto. Quindi, dire che volevo memorizzare le informazioni sulla sessione nel database e avere accesso a tali informazioni in modo che, se l'utente avesse fatto clic su un collegamento alla pagina del profilo, potrei ad esempio utilizzare le informazioni sulla sessione per ottenere le informazioni dell'utente. Come potrei ottenere questo? Ha senso usare questo approccio?

    
posta Scott 08.12.2011 - 21:29
fonte

1 risposta

5

Le sessioni si basano sull'identificatore di sessione, una stringa che identifica in modo univoco una sessione del browser tramite un cookie 1 impostato sul client quando viene chiamato session_start() . Poiché si basano sui cookie, dovresti trattarli come input dell'utente e non dovresti mai assolutamente fidarti dell'input dell'utente. I cookie possono essere rubati tramite XSS , e i cookie PHP non sono crittografati per impostazione predefinita.

Le sessioni sono memorizzate nella directory %TEMP% , a seconda di quale potrebbe essere per il tuo sistema. La posizione di salvataggio può essere modificata dalla direttiva session.save_path oppure dal session_save_path durante il runtime, ma su un tipico ambiente di hosting 2 , è generalmente considerato più facile accedere al file system rispetto a un database.

I vari problemi di sicurezza sono trattati nel manuale :

The session module cannot guarantee that the information you store in a session is only viewed by the user who created the session.

...

Assess the importance of the data carried by your sessions and deploy additional protections -- this usually comes at a price, reduced convenience for the user.

...

The session module cannot guarantee that the information you store in a session is only viewed by the user who created the session.

La fissazione della sessione è la buzzword comunemente citata, puoi trovare qualche informazione in più sul Vulnerabilità nella fissazione della sessione in applicazioni basate sul Web articolo a cui si fa riferimento nel manuale.

La funzione session_set_save_handler () ti consente di scegliere in modo trasparente dove si trovano le sessioni salvato:

session_set_save_handler() sets the user-level session storage functions which are used for storing and retrieving data associated with a session. This is most useful when a storage method other than those supplied by PHP sessions is preferred. i.e. Storing the session data in a local database.

Dopo aver creato e impostato il gestore, puoi continuare a utilizzare le sessioni normalmente. Ci sono alcuni esempi sui commenti alla pagina di manuale su come memorizzare le sessioni in un database. Memorizzare le sessioni in un database ha un importante svantaggio: se per qualsiasi motivo il database non funziona, allora hai perso tutto ciò che hai costruito attorno alle sessioni.

1 Puoi propagare l'id della sessione tramite un parametro URL , ma sono più problemi di quanti ne valga.

2 Con tipico intendo hosting condiviso a basso costo.

    
risposta data 08.12.2011 - 21:54
fonte

Leggi altre domande sui tag