2009-07-11 20 views
19

Utilizzo il sistema CodeIgniter da un po 'di tempo - ma it has è short comings. Sono grato per ciò che mi ha insegnato, ma ora ho bisogno di una biblioteca per un nuovo progetto non-codeigniter e quindi cerco idee su quali librerie hanno le cose giuste e quali no. Probabilmente dovrò prendere pezzi da diverse librerie per ottenere tutto ciò di cui ho bisogno.Migliore libreria per sessioni PHP

Ho appena dato un'occhiata alla libreria Kohana PHP session e mi piace come ritorna al modo nativo di PHP di usare $ _SESSION superglobal invece di forzare una modifica a $ this-> session per l'accesso ai dati.

In ogni caso, volevo sapere se c'erano altre buone librerie di sessione là fuori che potevo fare scherzi. C'è molto che deve essere gestito in una sessione oltre a solo CRUD funzionalmente.

  • Supporto per sessione non basati cookie di passaggio (vale a dire Facebook o uploader Flash)
  • "Dati Flash" che dura solo per il prossimo caricamento della pagina e quindi è auto-rimosso.
  • Funziona con $ _SESSION o $ this-> sessione in modo che i programmatori non debbano modificare il codice esistente.
  • Supporta l'impostazione di un nuovo ID di sessione (ad esempio session_id ('nuovo id')) nel caso in cui si desideri modificare l'id a metà della pagina.
  • Salva tutti i dati alla fine della richiesta di pagina anziché ogni volta che i dati vengono aggiunti o rimossi (salva query DB aggiuntive).
  • Supporta l'utilizzo di file, cookie o database per l'archiviazione. (o memcached sarebbe bello)
  • Tenta di negare l'accesso in caso di un hijack di sessione. (IP, useragent, o fingerprint)

ho appena trascorso un certo tempo andare oltre la logica per le librerie di sessione CodeIgniter e Kohana e mi si avvicinò con il seguente su come ognuno inizia e termina le sessioni per la pagina.

/************** 
** Kohana Sessions 
**************/ 
If not native file storage { 
    session_set_save_handler to the storage type (DB, cache, cookie...) 
} 

set the session_name() so php knows what cookie value to check 

start session 

/****** Saving ******/ 

session_write_close() which calls the given handler 


/************** 
** CI Sessions 
**************/ 

Try to read_session() -> { 
    session = Get cookie (if using cookies will also contain data) 

    if(database) { 
     session .= pull data from database 
    } 

    checks if valid... 

    $this->userdata = session data 

} else { 
    create a new one 
} 

/****** Saving ******/ 

session data is serialized either way 

if(cookie) { 
    save cookie with serialized data and params like "last_activity" 
} 
if(database) { 
    save serialized data in db and session in cookie 
} 
+0

+1. Questo è stato nella mia mente per qualche volta ora. Grazie per averlo spiegato nei dettagli – andyk

risposta

5

Hai dato un'occhiata a Zend_Session?

  • si può passare l'identificatore di sessione tramite URL utilizzando impostazioni PHP
  • si può scadere alcune variabili di sessione dal tempo o dal luppolo (richieste)
  • migrazione in altre applicazioni non sarà così facile e penso non è molto buono quando si scherza con $_SESSION quando si utilizza Zend_Session
  • Zend_Session ha un approccio basato su adpater per il salvataggio dei dati di sessione. È incluso un save-handler per DB, ma la sua architettura consente di inoltrare i gestori personalizzati.
  • Zend_Session supporta i validatori per verificare la validità di una sessione. Anche in questo caso abbiamo un'architettura aperta che consente di passare oggetti personalizzati per la convalida.
  • è possibile bloccare una sessione, aka rendono sola lettura
  • è possibile impedire la creazione di un'istanza di istanze multiple dello stesso spazio dei nomi sessione di
  • più v'è molto di più da scoprire con Zend_Session come rigenerante ID di sessione, emetti i "ricordi-me-cookies", revoca i "ricordi-me-biscotti" e così via.
+0

Grazie per il promemoria. Zend di solito copre tutte le loro basi, quindi è un ottimo codice da controllare. Tuttavia, con 10 file solo per un gestore di sessioni, penso che estrarrò alcune delle parti migliori in modo da non rovinare nulla scrivendo il mio. La classe Zend Session sembra seguire più da vicino la classe Kohana facendo affidamento sul superglobal $ _SESSION e impostando i gestori di sessione - che sicuramente sembra la giusta via da seguire. – Xeoncross

3

È possibile utilizzare questo in CI: EchoSession.

+0

Grazie, ma come ho detto questo non sarà per un progetto di codeigniter. In realtà, avevo già scaricato quella libreria mentre guardavo Zend_Session e molte altre librerie di sessione. Esaminando il codice da ciascuno di essi inizia a emergere un modello per quanto riguarda le "best practice" per la gestione delle sessioni. – Xeoncross

3

Ok, dopo aver scavato attraverso la lib di codice, non-$ _ SESSION codeigniter lib, le due librerie Kohana e Zend (che usano $ _SESSION), e molte altre librerie di sessione da altri progetti, credo che io costruisca la risposta a il mio problema. Qualcosa che soddisfi tutte le cose che ho elencato sopra (eccetto i dati flash).

Here is the code se qualcuno vuole usarlo o leggerlo mentre costruisce la propria libreria. Ho lasciato molti commenti esaustivi per spiegare il tutto e mi piacerebbe avere qualche feedback su di esso. Supporta token, uploader basati su flash, cookie, rigenerazione delle sessioni ogni 5 minuti (o qualsiasi altra cosa tu imposti) con la rimozione di sessioni precedenti e supporto per l'archiviazione di sessioni in qualsiasi database, file system, memchache o qualsiasi altra forma che desideri impostato.

2

Date un'occhiata Zebra_Session, a wrapper for PHP’s default session handling functions, using MySQL for storage

  • agisce come un wrapper per le funzioni di gestione delle sessioni di default di PHP, ma invece di memorizzare i dati di sessione in file flat li memorizza in un database MySQL, fornendo maggiore sicurezza e migliori prestazioni

  • è una sostituzione drop-in e apparentemente inattesa per il gestore di sessione predefinito di PHP: le sessioni PHP verranno utilizzate nello stesso modo in cui si utilizzava la libreria; non è necessario modificare alcun codice esistente!

  • implementa blocchi di riga, garantendo che i dati vengono correttamente trattati in scenari con multiple simultanee AJAX chiede

  • un solo file

  • maturo, altamente ottimizzato e costantemente sviluppata

  • very good documentation