向session_start()添加功能

时间:2014-03-19 22:41:17

标签: php

您好我想在php中的session_start函数中添加一些功能。我知道我可以编写一个自定义函数来替换session_start(),但这太过分了。我只想要一些额外的代码触发器,而不是删除旧的代码。

编辑:具体来说,我希望将会话ID写入sql表。

1 个答案:

答案 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添加到数据库中。