php实现session入库,php SESSION入库的实现

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

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

比如:

session入库可以解决哪些问题?

1. 可以解决跨域操作

2. 可以实现单点登陆

3. 可以统计在线人数

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

session_set_save_handler的回掉函数描述

实现session入库

第一步:在php.ini配置文件中设置session.save_headler=user(默认是file)

或者使用ini_set设置ini_set(‘session.save_handler’,’user’);

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

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

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

session_life 用于存放session的生存期

第三步:session_set_save_handler ( callback $open , callback $close ,callback $read , callback $write , callback $destroy , callback $gc )

第四步:代码实现

header('content-type:text/html;charset=utf-8');

//将session存储方式设置为存入数据库的方式

//session.save_handler = files

ini_set("session.save_handler", "user");

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

//打开并连接数据库

function open()

{

//使用pdo

$pdo = new PDO('mysql:host=127.0.0.1;dbname=yii','root','root');

$pdo->exec('set names utf8');

}

//关闭连接

function close()

{

//使用pdo

$pdo = new PDO('mysql:host=127.0.0.1;dbname=yii','root','root');

$pdo->exec('set names utf8');

$pdo = null;

}

//从表中中读信息

function read($session_id)

{

//使用pdo

$pdo = new PDO('mysql:host=127.0.0.1;dbname=yii','root','root');

$pdo->exec('set names utf8');

$read = $pdo->query("select * from session where session_id='$session_id'")->fetch(PDO::FETCH_ASSOC);

return $read["session_info"];

}

//将session存入数据库

function write ($session_id,$session_info)

{

// echo $session_id. " " . $session_info;

//使用pdo

$pdo = new PDO('mysql:host=127.0.0.1;dbname=yii','root','root');

$pdo->exec('set names utf8');

$read = $pdo->query("select * from session where session_id='$session_id'")->fetch(PDO::FETCH_ASSOC);

if(empty($read))

{

$time = time();

$pdo->exec("insert into session (session_id, session_info, session_life) values ('$session_id', '$session_info', '$time')");

}

else

{

$sql = "update session set session_info='$session_info' where session_id='$session_id'";

$pdo->exec($sql);

}

}

//销毁指定session

function destroy($session_id)

{

//使用pdo

$pdo = new PDO('mysql:host=127.0.0.1;dbname=yii','root','root');

$pdo->exec('set names utf8');

$pdo->exec("delete from session where session_id='$session_id'");

}

//删除所有过期的session

function gc()

{

}

session_start();

//判断是否有session

if(isset($_SESSION['name']))

{

$status = 1;

}

else

{

$status = 0;

}

//获取需要接收的值

$user_name = isset($_POST['user_name'])?$_POST['user_name']:null;

$user_pwd = isset($_POST['user_pwd'])?$_POST['user_pwd']:null;

//使用pdo

$pdo = new PDO('mysql:host=127.0.0.1;dbname=yii','root','root');

$pdo->exec('set names utf8');

$sql = "select * from user where username = '$user_name' and password = '$user_pwd' ";

$re = $pdo->query($sql)->fetch(PDO::FETCH_ASSOC);

if($re)

{

$status = 1;

$_SESSION['name'] = $user_name;

}

?>

Document

服务器3

姓名:
密码:

欢迎=$_SESSION['name']?>登录

服务器3

?>

以上内容希望帮助到大家,很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值