Хранение данных сеанса пользователя в настраиваемой базе данных - PullRequest
1 голос
/ 09 марта 2009

Можно сохранить сеанс пользователя в базе данных, изменив настройки в factories.yml:

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

Из приведенного примера видно, что столбцы в таблице ограничены несколькими предопределенными. Это означает, что невозможно хранить другую информацию, которую Symfony не ожидал, например, IP-адрес.

Можно ли расширить схему базы данных, включив в нее больше пользовательских столбцов?

Ответы [ 2 ]

2 голосов
/ 06 сентября 2011

Вы можете создать свой собственный класс сеанса, как этот

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);
    }
}

На фабриках.имл:

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

Это был базовый пример, поэтому вы найдете дополнительную информацию здесь:

0 голосов
/ 09 марта 2009

не напрямую; структура сеанса очень ограничена, хотя вы можете хранить довольно много данных в пределах сеанса. Symfony просто сохраняет данные сеанса в виде большого двоичного объекта в БД. Вы можете попробовать изменить класс sfMySQLSessionStorage для включения $ _SERVER ['REMOTE_IP'] в таблицу сеансов, если вам это действительно нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...