您好我想在php中的session_start函数中添加一些功能。我知道我可以编写一个自定义函数来替换session_start(),但这太过分了。我只想要一些额外的代码触发器,而不是删除旧的代码。
编辑:具体来说,我希望将会话ID写入sql表。
答案 0 :(得分:1)
您可以简单地在session_start()
周围创建一个函数包装器。
function my_session_start() {
session_start();
$session_id = session_id();
// write $session_id to database by whatever method you choose
}
// usage
my_session_start();
或者如果你想扩展sessionHandler,你可以这样做:
class mySessionHandler extends sessionHandler {
// perhaps a property to store db connection or DB object as needed for writing session id to database
protected $db = null;
public function __construct($db = null) {
if(is_null($db)) {
throw new Exception('Give me a database');
}
// maybe some other validation (could also use type hinting in parameter
$this->db = $db;
}
public function open($save_path, $session_id) {
parent::open($save_path, $session_id);
// not shown - use $this->db to insert $session_id to database
}
}
// usage
$session_handler = new mySessionHandler($db);
session_set_save_handler($session_handler, true);
session_start();
此处您只是重写open()
方法,以将会话ID添加到数据库中。