php改寫session到資料庫

來源:互聯網
上載者:User

標籤:

session改寫mysql

在調用 session_start();的地方改用執行個體化本類即可new SessionDB();

 

 

 session_set_save_handler(            array($this, ‘userSessionBegin‘),            array($this, ‘userSessionEnd‘),            array($this, ‘userSessionRead‘),            array($this, ‘userSessionWrite‘),            array($this, ‘userSessionDelete‘),            array($this, ‘userSessionGC‘)        );如果是類裡要這樣寫,因為要明確是哪個類的方法如果在類外可以這樣寫

session_set_save_handler(
‘userSessionBegin‘,
‘userSessionEnd‘,
‘userSessionRead‘,
‘userSessionWrite‘,
‘userSessionDelete‘,
‘userSessionGC‘)

<?php/** * session入庫工具類 */class SessionDB {    private $_dao;    public function __construct() {        //設定session處理器        ini_set(‘session.save_handler‘, ‘user‘);        session_set_save_handler(            array($this, ‘userSessionBegin‘),            array($this, ‘userSessionEnd‘),            array($this, ‘userSessionRead‘),            array($this, ‘userSessionWrite‘),            array($this, ‘userSessionDelete‘),            array($this, ‘userSessionGC‘)        );        //開啟        session_start();    }    function userSessionBegin() {        //初始化DAO        $config = array(‘host‘ => ‘127.0.0.1‘,    ‘port‘ => ‘3306‘, ‘username‘=>‘shop34‘, ‘password‘ => ‘1234abcd‘, ‘charset‘=>‘utf8‘, ‘dbname‘=>‘shop34‘);        $this->_dao = MySQLDB::getInstance($config);    }    function userSessionEnd() {        return true;    }    /**     * 讀操作     * 執行時機:    session機制開啟程中執行     * 工作:        從當前session資料區讀取內容     * @param $sess_id string     * @return string     */    function userSessionRead($sess_id) {        //查詢        $sql = "SELECT session_content FROM `p34_session` WHERE session_id=‘$sess_id‘";        return (string) $this->_dao->getOne($sql);    }    /**     * 寫操作     * 執行時機:    指令碼周期結束時,PHP在整理收尾時     * 工作:        將當前指令碼處理好的session資料,持久化儲存到資料庫中!     * @param $sess_id string     * @param $sess_content string 序列化好的session內容字串     * @return bool     */    function userSessionWrite($sess_id, $sess_content) {        // 完成寫        $sql = "REPLACE INTO `p34_session` VALUES (‘$sess_id‘, ‘$sess_content‘, unix_timestamp())";        return $this->_dao->query($sql);    }    /**     * 刪除操作     * 執行時機:    調用了session_destroy()銷毀session過程中被調用     * 工作:        刪除當前session的資料區(記錄)     * @param $sess_id string     * @return bool     */    function userSessionDelete($sess_id) {        //刪除        $sql = "DELETE FROM `p34_session` WHERE session_id=‘$sess_id‘";        return $this->_dao->query($sql);    }    /**     * 記憶體回收操作     * 執行時機:    開啟session機制時,有機率的執行     * 工作:        刪除那些到期的session資料區     * @param $max_lifetime     * @return bool     */    function userSessionGC($max_lifetime) {        //刪除        $sql = "DELETE FROM `p34_session` WHERE last_time<unix_timestamp()-$max_lifetime";        return $this->_dao->query($sql);    }}

 

gc回收器調用次數改寫

ini_set(‘session.gc_probability‘, ‘1‘); ini_set(‘session.gc_divisor‘, ‘3‘);//session.gc_divisor 與 session.gc_probability 合起來定義了在每個會話初始化時啟動 gc(garbage collection 記憶體回收)進程的機率。此機率用 gc_probability/gc_divisor 計算得來。例如 1/100 意味著在每個請求中有 1% 的機率啟動 gc 進程。session.gc_divisor 預設為 100。

 

php改寫session到資料庫

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.