通过更改factories.yml:
中的设置,可以在数据库中store user sessionall:
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地址。
是否可以扩展数据库架构以包含更多自定义列?
答案 0 :(得分:2)
您可以像这样创建自己的会话类
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);
}
}
在factories.yml:
all:
storage:
class: myPDOSessionStorage
db_table: my_session # Name of the table storing the sessions
database: my_session # Database connection to use
这是一个基本的例子,所以你可以在这里找到更多信息:
答案 1 :(得分:0)
不直接;虽然您可以在会话中存储相当多的数据,但会话的结构非常有限。 Symfony只将会话数据存储为db中的blob。您可以尝试修改sfMySQLSessionStorage类,以便在您真正需要时在会话表中包含$ _SERVER ['REMOTE_IP']。