php中使用session_set_save_handler(),session入庫(mysql)機制

seesion的入庫(mysql)操作,主要是修改seesion的讀取與寫入操作

主要是通過 bool session_set_save_handler(seesion_open,seesion_close,session_read,session_write,session_destory,session_gc);

依次對應的是開啓seesion連接方式,關閉session,讀取session,寫拉seesion,銷燬session,seesion的垃圾加收機制。

基本實例項目

<?php

/*
建表字段類型
create table session (
 9     sess_id char(32) UNIQUE NOT NULL,
10     sess_info text,
11     sess_expire int not null default 0
12     )CHARSET utf8 ENGINE INNODB;

*/

class FileSessionHandler
{
    private $savePath;
    public $pdo;
    //session入庫
    //1. 開啓session
    function open($savePath, $sessionName)
    {   
        //連接mysql
        $this->pdo = new PDO("mysql:host=localhost;dbname=test","root","root");
        $this->pdo->exec("set names utf8");
        //查看當前調用了什麼方法
        //echo __FUNCTION__.'<br/>';
    }
    //2. 關閉session
    function close()
    {   
        //關閉mysql
        $this->pdo = null;
        //echo __FUNCTION__.'<br/>';
        return true;
    }
    //3. 讀取session
    function read($id)
    {   
        //從數據庫讀取
       
        $sql = "select * from session where sess_id = '$id'";
        //得到一個數組
        $res = $this->pdo->query($sql)->fetch(PDO::FETCH_ASSOC);
        //echo __FUNCTION__.'<br/>';
        return $res['sess_info'];
    }
     // 4.寫入操作
    function write($id, $data)
    {   
        //使用replace主是要因爲要重複修改seesion,而sess_id又是UNIQUE
        $time = time();
        $sql = "replace into session values('$id','$data','$time')";
        //echo __FUNCTION__.'<br>';
        return $res = $this->pdo->exec($sql);

    }
    //5. 銷燬
    function destroy($id)
    {   
         //刪除數據庫中信息
        $sql = "delete from session where sess_id = '$id'";
        //echo __FUNCTION__.'<br>';
        return $res = $this->pdo->exec($sql);
    }
//6.回收
    function gc()
    {   
        //刪除過期的數據
        /*$expire = time()-ini_get('session.gc_maxlifetime');
        $sql = "delete from session where sess_expire < '{$expire}'";
    return $this->pdo->exec($sql);*/
        //echo __FUNCTION__.'<br>';
    }

}

以下用於外部實例調用:

注:外部調用需引入以上類文件

/**
* 以下用於外部調用
*/
$handler = new FileSessionHandler();
//修改session機制
session_set_save_handler(
    array($handler, 'open'),
    array($handler, 'close'),
    array($handler, 'read'),
    array($handler, 'write'),
    array($handler, 'destroy'),
    array($handler, 'gc')
    );

// 下面這行代碼可以防止使用對象作爲會話保存管理器時可能引發的非預期行爲
//register_shutdown_function('session_write_close');


// 現在可以使用 $_SESSION 保存以及獲取數據了
session_start();//開啓session
$_SESSION['sess_info']='632275220';


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章