zoukankan      html  css  js  c++  java
  • 修改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);

  • 相关阅读:
    天文望远镜(二)
    天文望远镜(一)
    安静
    JavaScript 私有类字段和 TypeScript 私有修饰符
    js解析剪切板里的excel内容
    js正则
    jquery扩展方法:实现模拟Marquee无限循环滚动
    js中onload和ready区别
    Js如何从字符串中提取数字?
    JSBridge 初探
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3241334.html
Copyright © 2011-2022 走看看