看到这个题目,是否觉的高大上呢?其实特别简单。
先看这篇文章
https://blog.csdn.net/yt_php/article/details/80464890
PS 打开浏览器,搜索session_set_save_hander
PS 点开后看到这一段话
PS 那我们就使用这种方式,也就是找5.4版本后的部分,下拉一小部分后看到
PS 源码都写好了,下一步作的是,复制建表的sql,建立个数据表。
PS 接着复制php代码,粘贴
PS 修改数据库链接,大功告成。
session_start();
//写
$_SESSION['a'] = 1;
实例代码
<?php
header("content-type:text/html;charset=utf-8");
//面向过程实现session入库
class session_mysql
{
private $link;
/**
* 准备工作 数据库链接
* @param [type] $save_path session以文件作为存贮介质时 session文件目录
* @param [type] $session_name cookie数据名(保存的是session会话的名称)
* 以上参数与session入库无关但是无法省略
* @return [type] [description]
*/
//error_reporting(0);
public function open($save_path,$session_name)
{
//global $link;
$link = @mysqli_connect('localhost','root','root','session2018');
//var_dump($link);
if(!$link){
return false;
}
$this->link = $link;
return true;
}
/**
* 按照会话名称读取session数据
* @param 当前session会话的名称
* @return 从数据表中读取出来的序列化字符串
*/
public function read($session_id)
{
//global $link;
$sql = "select session_str from my_session where session_id = '$session_id'";
$res = mysqli_query($this->link,$sql);
$line = mysqli_fetch_assoc($res);
//释放结果集
mysqli_free_result($res);
if($line){
return $line['session_str'];
}
return '';
}
/**
* [write 按照sessionid将数据写入]
* @param [type] $session_id 当前会话名称
* @param [type] $session_data 序列化的session数据
* @return [type] [description]
*/
public function write($session_id,$session_data)
{
//global $link;
$time =time();
$sql = "REPLACE INTO my_session VALUES ('$session_id','$session_data',$time)";
//echo $sql;
//var_dump($link);
$res = mysqli_query($this->link,$sql);
return $res;
}
public function close()
{
//global $link;
//$link = $GLOBALS['link'];
mysqli_close($this->link);
return true;
}
/**
* 销毁会话对应的数据
* @param [type] $session_id [description]
* @return [type] [description]
*/
public function destory($session_id)
{
//global $link;
//$link = $GLOBALS['link'];
$sql ="DELETE FROM my_session WHERE session_id = '$session_id'";
return mysqli_query($this->link,$sql);
}
/**
* 垃圾回收机制
* @param 垃圾回收机制种设定的最大时间
* phpini中session.gc_maxlifetime = 1440
* @return [type] [description]
*/
public function gc($lifetime)
{
//global $link;
//$link = $GLOBALS['link'];
//当前时间戳 - 生命周期
$expire_time = time() - $lifetime;
$sql = "DELETE FROM my_session WHERE session_upd < $expire_time";
return mysqli_query($this->link,$sql);
}
}
$test = new session_mysql();
session_set_save_handler($test,true);
//第二个参数的意义
//在使用对象时必须将session_write_close注册为shutdown
session_start();
/*$_SESSION['a'] = 1;
$_SESSION['b'] = 'test string';*/
echo "<pre>";
print_r($_SESSION);