2010-01-05 15 views
43

Sono relativamente nuovo a CodeIgniter e sto facendo il mio primo progetto CI in cui ci sono account utente, ecc. In passato, ho sempre usato la variabile $ _SESSION di PHP a questo scopo. Tuttavia, CI sembra avere il proprio meccanismo di sessione, che afferma essere "migliore"Sessioni CodeIgniter vs sessioni PHP

Il meccanismo di sessione di CI sembra archiviare tutti i dati in un cookie? Personalmente mi piace l'idea di tutti i dati memorizzati sul server, a cui si accede con un cookie-key come il meccanismo di sessione nativo di PHP ... Sono stupido pensando che sia meglio? Dovrei semplicemente accettare il meccanismo di CI? O dovrei andare avanti e usare le sessioni native di PHP?

Che cosa fate?

Grazie,
Mala

risposta

34

Nella mia esperienza con CI ho incontrato alcune anomalie con le sue sessioni, ma per la maggior parte giorno per giorno ha bisogno dell'altro la biblioteca è buona e facile da lavorare. Come è stato sottolineato, Flashdata è una funzionalità molto bella.

Se si sceglie di stare con le sessioni di CI, mi piacerebbe consigliamo vivamente di memorizzare le sessioni in un database e, in aggiunta, crittografare i cookie:

struttura
$config['sess_encrypt_cookie'] = TRUE; 
$config['sess_use_database'] = TRUE; 
$config['sess_table_name']  = 'sessions'; 

La banca dati dovrebbe essere la seguente:

CREATE TABLE IF NOT EXISTS `sessions` (
    session_id varchar(40) DEFAULT '0' NOT NULL, 
    ip_address varchar(16) DEFAULT '0' NOT NULL, 
    user_agent varchar(50) NOT NULL, 
    last_activity int(10) unsigned DEFAULT 0 NOT NULL, 
    user_data text NOT NULL, 
    PRIMARY KEY (session_id) 
); 
+1

Le sessioni nel database sono la soluzione migliore per una sicurezza ottimale con codeigniter. –

+9

Grazie. A seguito di ulteriori ricerche ho scoperto che si dovrebbe rimuovere il carattere di sottolineatura dal nome del cookie di sessione, in quanto ciò causa il soffocamento di IE. – Mala

+0

@Mala: cosa significa "soffocare"? Dove hai letto di questo problema di denominazione dei cookie in IE? So che c'è un bug in connessione con i caratteri di sottolineatura nel dominio del sito web [link] (http://www.enhanceie.com/ie/bugs.asp) ma questo è un altro problema. –

8

il manuale dice maggiore flessibilità piuttosto che meglio ;-)

presumo il principale vantaggio di codeigniter classe sessione è che si integra con il quadro e offre alcune funzionalità extra, come il monitoraggio degli indirizzi IP e ciò che chiama flashdata (dati di sessione che vengono cancellati non appena letti). Se si sta utilizzando un framework, in primo luogo ciò significa che queste opzioni potrebbero essere interessanti per voi.

Qualunque cosa, è anche possibile salvare i dati di sessione in un database:

http://codeigniter.com/user_guide/libraries/sessions.html

4

Mantenere la sessione PHP per informazioni importanti e utilizzare la sessione CI per informazioni meno importanti.

Leggi qui wyh. http://codeigniter.com/forums/viewthread/130577/

+0

Il consenso generale su quel thread è che le sessioni CI sono come informazioni importanti (archiviazione di crittografia/database), ma non sono compatibili con Internet Explorer. – NobleUplift

+2

In realtà, riprendo quella parte su Internet Explorer. Apparentemente quell'informazione è stata propagata da un teorico della cospirazione. – NobleUplift

1

So che questo è un post più vecchio, ma ritengo che valga la pena condividere ciò che ho trovato.

Poiché CI utilizza un approccio basato sui cookie (anche con la memorizzazione del database) causa un problema per la mia app particolare che serve i dati ai client remoti che richiedono i dati tramite arricciatura. La linea di fondo è Cookie e Cross Site Scripting, sebbene gestibili, non giocano bene insieme.

Ho scelto di provare a sovrascrivere la classe Session.php nativa fornita da CI con il mio MY_Session.php. Sono stato contento di scoprire che questo non era troppo difficile, ma sono rimasto sorpreso nel constatare che l'IC stava rigenerando l'ID della sessione anche se il mio script li aveva forniti esplicitamente.

Secondo il manuale CI

ID sessione univoco dell'utente (questa è una stringa statisticamente casuale con molto forte entropia, hash MD5 per portabilità e rigenerato (default) ogni cinque minuti)

Anche se posso probabilmente trovare un modo per ignorare questa, mi chiedo se non sarebbe molto più facile per tornare a sessioni PHP.

Solo spunti di riflessione se hai intenzione di usare CI.

1

sessioni CI ha limiti di dimensione bagagli

Come sapete, le sessioni di CI sono i cookie in sostanza, se criptare o meno. Per quanto riguarda la sicurezza, entrambi hanno pro e contro.

La mia preoccupazione era il limite di dimensioni delle sessioni CI, Può contenere solo 4 kb di dati come fondamentalmente un cookie, mentre la sessione nativa di PHP memorizza solo l'id di riferimento sul cookie e tutti i dati di sessione sono memorizzati nella memoria del server. Ciò risulta utile quando è necessario memorizzare un numero maggiore di elementi in una sessione.

Di 'un carrello della spesa con più elementi, o una playlist musicale utente con più di 50 tracce ... ecc

Spero che queste informazioni aiuta qualcuno un giorno.

Cheers .. !!