修改session的存储机制

来源:互联网 发布:linux wget命令 编辑:程序博客网 时间:2024/06/12 21:39
  <?php 
//修改session的存储机制

//最起码应该有一个 读方法, 和一个 写方法。


//1, 我们先去建立 读方法 和 写方法。
//2, 告知session系统,使用我们的方法完成数据的读和写操作。


//建立读方法
/**
 * 利用 sessionID 获得session数据
 *@param $sess_id string 当前会话的ID
 *@return string 当前的sessiondata (不需要考虑序列化与反序列化的问题)
 */

function sess_read($sess_id) {
    echo 'read';
    //查询的sql语句
    $query = "select sess_data from sessions where sess_id='{$sess_id}'";
    $result = mysql_query($query);
    $row = mysql_fetch_assoc($result);
    //返回查询到的数据
    return $row['sess_data'];


}


//写方法
/**
 * @param $sess_id string 当前的sessionID
 * @param $sess_data string 当前的session数据,(序列化好的)
 */
function sess_write($sess_id, $sess_data) {
    echo 'write';
    //应该考虑到 当前的session记录是否存在
    //存在应该update更新,不存在应该insert新建
    $expire = time();
    $query = "insert into sessions values ('{$sess_id}', '{$sess_data}', {$expire}) on duplicate key update sess_data='{$sess_data}', expire={$expire}";
    return mysql_query($query);


}


/**
 *session_start 是执行的方法,用户初始化资源
 * @param $save_path string php.ini中 session.save_path 的值。
 * @param $sess_name string php.ini中 session.name 的值。ini_get()也可以获得。
 *  这2参数就是php.ini文件中对应的值---可以输出看看
 */

function sess_open($save_path, $sess_name) {//这2个参数可以不写
    echo 'open';
    //连接上数据库  其他几个函数都可以用这个链接不会涉及到作用于的问题
    $link = mysql_connect('localhost', 'root', '1234abcd');
    mysql_query('use test', $link);
    mysql_query('set names utf8');
}


/**
 *在最后,释放资源的方法
 */

function sess_close() {
//    echo 'close';
    mysql_close();
}
/**
 * @param $sess_id string 当前的sessionID
 */

function sess_destroy($sess_id){
    echo 'destroy';
    $query = "delete from sessions where sess_id='{$sess_id}'";
    return mysql_query($query);


}
/**
 *负责回收垃圾的函数
 *@param $ttl 当前的session数据的最大生存周期
 */

function sess_gc($ttl) {
    //
//    echo 'gc';
    $expire = time() - $ttl;
    $query = "delete from sessions where expire < {$expire}";


    return mysql_query($query);


}


//将我们的方法 告知给当前的session系统
//利用函数 session_set_save_handler();

session_set_save_handler('sess_open', 'sess_close', 'sess_read', 'sess_write', 'sess_destroy', 'sess_gc');




//开启session


session_start();


$_SESSION['name'] = 'leyangjun';


$_SESSION['age'] = '23';


unset($_SESSION['name']);
//session_destroy();


//var_dump($_SESSION);
原创粉丝点击