session入库

来源:互联网 发布:搜狐 网络大电影 编辑:程序博客网 时间:2024/05/23 02:04

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

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

比如:

 *   1可以解决不同平台多服务器间session数据共享

 *   2可以统计在线人数

 *   3可以踢出在线用户

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


使用步骤:

第一步:php.ini配置文件中设置session.save_handler = user 或者用ini_set设置ini_set('session.save_handler','user');

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

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

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

session_MaxLifeTime用于存放session的生存期


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

session_set_save_handler( callback $open , callback $close , callback $read , callback $write , callback $destroy , callback $gc );

session_set_save_handler("open", "close", "read", "write", "destroy", "gc");

这两种选一种即可;

session_set_save_handler的用法可以直接百度

<?php

header("content-type:text/html;charset=utf8");

//将session存储方式设置为存入数据库方式
ini_set("session.save_handler","user");//更改php.ini的配置
session_set_save_handler("open", "close", "read", "write", "destroy", "gc");
//打开连接
function open()
{
    
}

//关闭连接
function close()
{
    //连接pdo
    // $pdo = new PDO("mysql:host=localhost;dbname=nine","root","root");
    // $pdo->query("set names utf8");
    // $pdo = null;
}

//从表中读信息
function read($session_id)
{
    $pdo = new PDO("mysql:host=localhost;dbname=nine","root","root");
    $pdo->query("set names utf8");
    $res = $pdo->query("select * from session where session_id = '$session_id'")->fetch(PDO::FETCH_ASSOC);
    return $res['session_info'];
}

//写
function write($session_id,$session_info)
{
    //echo $session_id;
    // echo $session_info;die;
    $pdo = new PDO("mysql:host=localhost;dbname=nine","root","root");
    $pdo->query("set names utf8");
    $res = $pdo->query("select * from session where session_id = '$session_id'")->fetch(PDO::FETCH_ASSOC);
    if(empty($res))
    {
        // echo "1";die;
        $time = time();
        // var_dump($time);die;
        $pdo->exec(" insert into session (session_id,session_info,session_maxlifetime) values ('{$session_id}','{$session_info}','{$time}')");
    }
    else
    {
        $pdo->exec(" update session set session_info='$session_info' where session_id='$session_id'");
    }
}

//销毁
function destroy($session_id)
{
    $pdo = new PDO("mysql:host=localhost;dbname=nine","root","root");
    $pdo->query("set names utf8");
    $pdo->exec("delete from session where session_id = '$session_id'");
}

//删除所有过期的session
function gc()
{

}

最后直接在后边存取session就行了,比较简单


原创粉丝点击