• 修改session的存储机制


      <?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);

  • 相关阅读:
    webapi 中使用 protobuf
    apache httpclient cache 实现可缓存的http客户端
    编译nginx时提示undefined reference to 'pcre_free_study' 的问题及解决
    深入理解JVM内存回收机制(不包含垃圾收集器)
    从JDK源码理解java引用
    Buffer的创建及使用源码分析——ByteBuffer为例
    二叉树的子结构、深度以及重建二叉树
    数据结构——树与二叉树的遍历
    Java NIO之Buffer的使用
    Java多线程之synchronized详解
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3241334.html
Copyright © 2020-2023  润新知