轻松实现session入mysql

看到这个题目,是否觉的高大上呢?其实特别简单。

先看这篇文章

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);

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值