php SESSION入库的实现
PHP 实现 session 入库
2023-09-27 14:26:14 时间
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 )
第四步:代码实现
<?php 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; } ?>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <?php if($status == 0){?> <h3>服务器3</h3> <form action="a.php" method="post"> <table> <tr> <td>姓名:</td> <td><input type="text" name="user_name"></td> </tr> <tr> <td>密码:</td> <td><input type="password" name="user_pwd"></td> </tr> <tr> <td></td> <td><input type="submit" value="登录"></td> </tr> </table> </form> <?php } else{?> <h2>欢迎<?=$_SESSION['name']?>登录</h2> <h3>服务器3</h3> <?php } ?> </body> </html>
相关文章
- PHP实现大文件下载
- php 在函数内引用全局变量 讲解引用
- php实现查询功能
- PHP获取参数时, 解耦其默认值的处理逻辑
- 在PHP应用程序开发中不正当使用mail()函数引发的血案
- PHP实现基于文本的莫斯电码生成器
- php获取YouTube视频信息的方法
- 精品基于PHP实现的美食菜谱网站
- PHP 7 测试用例(转)
- PHP 实现 一致性哈希 算法(转的)
- 精品基于PHP实现的社团活动小程序
- 精品基于PHP实现的计算机学院师生招聘系统
- 精品基于PHP实现的网上买卖管理系统购物商城
- PHP + Socket 发送http请求进而实现站点灌水
- php的数组与字符串的转换函数整理
- PHP实现微信商户支付企业付款到零钱功能代码实例
- ***百度统计图表Echarts的php实现类,支持柱形图、线形图、饼形图
- php中empty()、isset()、is_null()和变量本身的布尔判断区别
- 研究发现有钱国家爱Python 穷则偏爱PHP
- PHP实现登录,注册,密码修改
- [Php] PHPExcel读取Excel文件(或来自客户端上传的)并返回二维数组
- php利用32进制实现对id加密解密
- php多台服务器实现session共享
- php各种主流框架的比较
- PHP扩展编写、PHP扩展调试、VLD源码分析、基于嵌入式Embed SAPI实现opcode查看
- PHP 代码加密