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_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");
这两种选一种即可;
<?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就行了,比较简单