2009-03-09 7 views
1

Il est possible de store user session dans la base de données en modifiant les paramètres dans factories.yml:Stockage des données de session utilisateur dans une base de données personnalisée

all: 
    storage: 
    class: sfMySQLSessionStorage 
    param: 
     db_table: session    # Name of the table storing the sessions 
     database: propel    # Name of the database connection to use 
     # Optional parameters 
     db_id_col: sess_id    # Name of the column storing the session id 
     db_data_col: sess_data   # Name of the column storing the session data 
     db_time_col: sess_time   # Name of the column storing the session timestamp 

Dans l'exemple donné, il semble que les colonnes du tableau sont limitées à une quelques uns prédéfinis. Ce qui signifie qu'il n'est pas possible de stocker d'autres informations que Symfony ne prévoit pas, telles que l'adresse IP.

Est-il possible d'étendre le schéma de base de données pour inclure davantage de colonnes personnalisées?

Répondre

0

Non directement; la structure d'une session est très limitée, bien que vous puissiez stocker un peu de données au sein de la session. Symfony stocke simplement les données de session sous forme de blob dans la base de données. Vous pouvez essayer de modifier la classe sfMySQLSessionStorage pour inclure $ _SERVER ['REMOTE_IP'] dans la table de session si vous en avez vraiment besoin.

2

Vous pouvez créer votre propre classe de séance comme celle

class myPDOSessionStorage extends sfPDOSessionStorage { 
    /** 
    * Extending session write function 
    * 
    * @param string $id Session identifier 
    * @param mixed $data Session's data 
    */ 
    public function sessionWrite($id, $data){ 
     /* 
      Handle your specific data, e.g. : 
     */ 
     $mySession = new MySession(); 
     $mySession->setIp($_SERVER['REMOTE_IP']); 
     // connect with org. session 
     $mySession->setSessionId($id); 
     // Save extended session - you for sure need to add logic in finding existing one's 
     $mySession->save(); 

     // IMPORTANT Call Parent function to update original session data 
     parent::sessionWrite($id, $data); 
    } 
} 

En factories.yml:

all: 
    storage: 
    class: myPDOSessionStorage 
    db_table: my_session # Name of the table storing the sessions 
    database: my_session # Database connection to use 

Ce fut un exemple de base, de sorte que vous trouverez plus d'informations ici:

Questions connexes