2010-06-01 16 views
7

Come posso utilizzare la sessione nella tabella del database con php e mysql?imposta la sessione nel database in php

+1

Puoi darci qualche informazione in più? Che cosa hai intenzione di fare con le sessioni? – 2ndkauboy

+2

Puoi prima cercare su Google. Uno dei primi collegamenti che ti fornirà è questo, ad esempio: http://www.devshed.com/c/a/PHP/Storing-PHP-Sessions-in-a-Database/ – nico

+0

Generalmente sessione memorizzata in file temporanei nel server. Voglio memorizzare la sessione nella tabella del database. – shin

risposta

18

Si avrebbe bisogno di creare un oggetto in questo modo:

class SessionHandler 
{ 
    private static $lifetime = 0; 

    private function __construct() //object constructor 
    { 
     session_set_save_handler(
      array($this,'open'), 
      array($this,'close'), 
      array($this,'read'), 
      array($this,'write'), 
      array($this,'destroy'), 
      array($this,'gc') 
     ); 
    } 

    public function start($session_name = null) 
    { 
     session_start($session_name); //Start it here 
    } 

    public static function open() 
    { 
     //Connect to mysql, if already connected, check the connection state here. 

     return true; 
    } 

    public static function read($id) 
    { 
     //Get data from DB with id = $id; 
    } 

    public static function write($id, $data) 
    { 
     //insert data to DB, take note of serialize 
    } 

    public static function destroy($id) 
    { 
     //MySql delete sessions where ID = $id 
    } 

    public static function gc() 
    { 
     return true; 
    } 
    public static function close() 
    { 
     return true; 
    } 
    public function __destruct() 
    { 
     session_write_close(); 
    } 
} 

Poi, prima session_start iniziato questa classe!

include 'classes/sessionHandlerDB.php'; 

$session = new SessionHandler(); 

$session->start('userbase'); 

$_SESSION['name'] = 'Robert Pitt'; //This is sent to SessionHandler::write('my_id','Robert Pitt') 
echo $_SESSION['name']; //This calls SessionHandler::read($id)//$id is Unique Identifier for that 

http://php.net/manual/en/function.session-set-save-handler.php

http://php.net/manual/en/function.serialize.php

+0

Puoi dirmi come posso utilizzare questo codice per impostare la sessione? C'è qualche differenza con le normali impostazioni di sessione? – shin

+0

Bascially per usare $ _SESSION ... Questo interrogherà SessionHandler, il che significa che il gestore di sessione è l'intermediario, memorizza i dati e restituisce i dati, Se si applica il proprio gestore è possibile memorizzarlo in qualsiasi modo, DB, File etc L'esecuzione di questo dirà a PHP che quando si utilizza la Session per interrogare questa classe per i dati. finché non includi questo file e ne crei un'istanza, tutto il resto non cambierà, il metodo di archiviazione sarà DB. Ho aggiornato il mio post, per favore rivedere – RobertPitt

+0

Anche questo codice è puramente esemplificativo, lo estenderei per avere un oggetto di archiviazione in modo da ridurre le chiamate a db, inoltre guarda MemCached! – RobertPitt

1

È necessario utilizzare session_set_save_handler per scrivere funzioni di apertura, chiusura, lettura, scrittura, eliminazione e garbage collection personalizzate.