session信息入库

1、为什么要实现session信息入库?

session入库 重写session制机,在session的周期内,获得到session的数据并记录到数据库,和获得的进程

 *              作用: 解决了http超文本传输的无状态无法保存用户信息的问题

 *

 * Session默认是存放到服务器上的文件中,不方便管理,如果能把session存放到数据库中就可以方便的对数据库进行管理了

 *   1 可以解决跨域操作

 *   2 可以实现单点登录

 *   3 可以统计在线人数

 *   4 可以踢出在线用户

 *   5 可以实现同一时只允许一个用户在线

2、session入库的实现步骤:

使用步骤

 *      第一步:php.ini配置文件中设置session.save_handler = user

 *      第二步:创建一个存放session的数据表

 *      第三步:实现session入库的回调函数

 *      第四步:设置session的处理器,自动调用六个回调函数

 * 数据库的设计

 *      sesssion_id 用于存放session_id,字段类型为字符型,长度为32

 *      session_value用于存放session的内容,字段类型为text

 *      session_MaxLifeTime 用于存放session的生存期

 * 实现session的回调函数

 *      ini_set('session.save_handler','user');



    <?php  
    header("content-type:text/html;charset=utf8");  
    ini_set("session.save_handler","user");  
    //session.gc_maxlifetime = 1440 垃圾回收时间,session有效期  
      
    session_set_save_handler( "open","close","read","write","destroy","gc" );  
      
      
    //在运行session_start()时执行  
    function open()  
    {  
        //连接数据库  
        @$link = mysql_connect('127.0.0.1', 'root', 'root');  
        mysql_query('set names utf8');  
        mysql_query('use 9yii');  
    }  
      
    //在脚本执行完成或调用session_write_close() 或 session_destroy()时被执行,即在所有session操作完后被执行  
    function close()  
    {  
        mysql_close();  
    }  
      
    //在运行session_start()时执行,因为在session_start时,会去read当前session数据  
    function read($sess_id)  
    {  
        $sql = "select session_data from `session` where session_id = '$sess_id'";  
        $result = mysql_query($sql);  
        if($rows = mysql_fetch_assoc($result)){  
            return $rows['session_data'];  
        }else{  
            return '';  
        }  
    }  
      
    //此方法在脚本结束和使用session_write_close()强制提交SESSION数据时执行  
    function write($sess_id,$sess_data)  
    {  
        $sql = "insert into `session` (session_id,session_data,session_time) values('$sess_id','$sess_data', now())  
                on duplicate key update session_data = '$sess_data' , session_time = now()";  //这是为了gc()  
        return mysql_query($sql);  
      
    }  
      
    // 销毁指定session  
    function destroy($sess_id)  
    {  
        echo __FUNCTION__;  
        $sql = "delete from `session` where session_id = '$sess_id'";  
        return mysql_query($sql);  
      
    }  
      
      
    //执行概率由session.gc_probability 和 session.gc_divisor的值决定,时机是在open,read之后,session_start会相继执行open,read和gc  
    function gc($sess_id)  
    {  
        // 删除所有过期的session  
        echo __FUNCTION__;  
        $sql = "delete from `session` where now()-session_time > '1440' ";  
        return mysql_query($sql);  
    }  
      
    session_start();//必须在session_set_save_handler后面执行  
    $_SESSION['name']='zhangsan';  
    //echo session_id();  
    echo $_SESSION['name'];  

<?php    
ini_set("session.save_handler","user");      
//session.gc_probability = 1 分子      
ini_set("session.gc_probability",1);      
//session.gc_divisor = 1000 分母      
ini_set("session.gc_divisor",2);      
//session.gc_maxlifetime = 1440 垃圾回收时间,session有效期      
session_set_save_handler( "open","close","read","write","destroy","gc" );    
//连接数据库      
function open(){      
    @$link = mysql_connect('127.0.0.1', 'root', 'root');      
    mysql_query('set names utf8');      
    mysql_query('use wangbin');      
}      
function close(){      
    mysql_close();      
}      
function read($sess_id){      
    $sql = "select session_data from `session` where session_id = '$sess_id'";      
    $result = mysql_query($sql);      
    if($rows = mysql_fetch_assoc($result)){    
        return $rows['session_data']; }    
    else{    
        return '';    
    }      
}      
function write($sess_id,$sess_data){      
    $sql = "insert into `session` (session_id,session_data,session_time) values('$sess_id','$sess_data', now()) on duplicate key update session_data = '$sess_data' , session_time = now()";  //这是为了gc()      
    return mysql_query($sql);      
      
}      
function destroy($sess_id){      
    echo __FUNCTION__;      
    $sql = "delete from `session` where session_id = '$sess_id'";      
    return mysql_query($sql);      
      
}      
function gc($sess_id){      
    $maxlifetime = ini_set("session.gc_maxlifetime");      
    echo __FUNCTION__;      
    $sql = "delete from `session` where now()-session_time > '$maxlifetime' ";      
    return mysql_query($sql);      
}      
header("content-type:text/html;charset=utf8");      
session_start();      
$_SESSION['name']='aa';      
//echo session_id();      
echo $_SESSION['name'];   


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值