类:

<?php/* 使用数据库保存session */class DBHandler implements SessionHandlerInterface {protected $dbh;public function open($save_path, $name) {try {$this->connect($save_path, $name);return true;} catch(PDOException $e) {echo $e->getMessage();return false;}}public function close() {return true;}public function destroy($session_id) {$sth = $this->dbh->prepare("DELETE FROM sessions WHERE session_id = ?");$sth->execute(array($session_id));return true;}public function gc($maxlifetime) {$sth = $this->dbh->prepare("DELETE FROM sessions WHERE last_update < ?");$sth->execute(array(time() - $maxlifetime));return true;}public function read($session_id) {$sth = $this->dbh->prepare("SELECT session_data FROM sessions WHERE session_id = ?");$sth->execute(array($session_id));$row = $sth->fetch(PDO::FETCH_NUM);if(count($row) == 0) {return '';} else {return $row[0];}}public function write($session_id, $session_data) {date_default_timezone_set('PRC');$now = time();$sth = $this->dbh->prepare("UPDATE sessions SET session_data = ?,last_update = ? WHERE session_id = ?");$sth->execute(array($session_data, $now, $session_id));if($sth->rowCount() == 0) {$sth2 = $this->dbh->prepare("INSERT INTO sessions (session_id, session_data, last_update) VALUES (?,?,?)");$sth2->execute(array($session_id, $session_data, $now));}}public function createTable($save_path, $name, $connect = true) {if($connect) {$this->connect($save_path, $name);}$sql =<<<_SQL_
CREATE TABLE sessions (session_id VARCHAR(64) NOT NULL,session_data MEDIUMTEXT NOT NULL,last_update INT NOT NULL,PRIMARY KEY (session_id)
)
_SQL_;$this->dbh->exec($sql);}public function connect($save_path) {$parts = parse_url($save_path);parse_str($parts['query'], $query);//$dsn格式:mysql:host=localhost;dbname=test$dsn = $parts['scheme'].":host=".$parts['host'].";dbname=".$query['dbname'];$user = $query['user'];$password = $query['password'];$this->dbh = new PDO($dsn, $user, $password);$this->dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);try {$this->dbh->query('SELECT 1 FROM sessions LIMIT 1');} catch(Exception $e) {$this->createTable($save_path, NULL, false);}}
}

  

使用:

<?phpinclude './db.php';ini_set('session.save_path', "mysql://localhost?user=root&password=&dbname=test");
ini_set('session.gc_maxlifetime', 5);
ini_set('session.gc_divisor', 2);
session_set_save_handler(new DBHandler);session_start();if(! isset($_SESSION['visits'])) {$_SESSION['visits'] = 0;
}$_SESSION['visits']++;
echo '你是第 '.$_SESSION['visits'].' 次访问';

 

参考:

<PHP Cookbook>3'rd 

使用 PDO 方式将 Session 保存到 MySQL 数据中相关推荐

  1. python hive mysql_[7] 编写Python脚本将Hive的运算结果保存到MySQL数据库中(1) - 摩西莫西 - ITeye技术网站...

    编写Python脚本将Hive的运算结果保存到MySQL数据库中(1) 很多情况下,需要将Hive中的运算结果保存到MySQL数据库中,可以通过简单的Python脚本来实现. 例子1:如果获取Hive ...

  2. [7] 编写Python脚本将Hive的运算结果保存到MySQL数据库中(1) - 摩西莫西 - ITeye技术网站...

    [7] 编写Python脚本将Hive的运算结果保存到MySQL数据库中(1) - 摩西莫西 - ITeye技术网站 [7] 编写Python脚本将Hive的运算结果保存到MySQL数据库中(1) - ...

  3. session mysql java_PHP自定义session处理方法,保存到MySQL数据库中

    我们都知道,session是为了解决因特网的无状态属性而创造出来的.我们可以用session这种会话管理机制来构建购物车.监控站点网络访问,甚至还可以跟踪某一个用户具体是如何使用你的应用的.PHP默认 ...

  4. php如何将mysql数据库中的admin字段赋值给session_转php中使用session_set_save_handler()函数把session保存到MySQL数据库实例...

    PHP保存session默认的是采用的文件的方式来保存的,这仅仅在文件的空间开销很小的windows上是可以采用的,但是如果我们采用 uinx或者是liux上的文件系统的时候,这样的文件系统的文件空间 ...

  5. 读dataframe存入mysql_DataFrame数据保存到mysql数据库中

    本篇文章主要基于python3.6与pandas实现以下数据库操作功能: 创建数据库 数据库创建表 数据库批量插入数据 数据库更新数据 数据库配置 class sqlConfig: db_name = ...

  6. python爬取淘宝搜索页面+url+图片下载并将信息保存到MySQL数据库中

    人狠话不多,直接上代码,都有详细注释,不多解释 需要安装的包: pymysql,用于连接mysql数据库 urllib,爬虫必备包,urllib3也可以 # encoding:utf-8 import ...

  7. kafka偏移量保存到mysql里_SparkStreaming+kafka保存offset的偏移量到mysql案例

    MySQL创建存储offset的表格 mysql> use test mysql> create table hlw_offset( topic varchar(32), groupid ...

  8. mysql打印语句_大数据挖掘—(八):scrapy爬取数据保存到MySql数据库

    (大数据挖掘-(七):读懂MySql数据库操作)(大数据挖掘神器--scrapy spider爬虫框架(五):解析多层网页) 通过往期的文章分享,我们了解了如何爬取想要的数据到Items中,也了解了如 ...

  9. SparkStreaming读取Kafka的Json数据然后保存到MySQL

    一般我们使用SparkStreaming消费kafka数据,获取到数据后解析,使用JDBC的方式写入数据库,如下所示. 以上的方式没什么毛病,但是当我们消费的kafka数据类型比较多样的时候,我们需要 ...

  10. pandas对象保存到mysql出错提示“BLOB/TEXT column used in key specification without a key length”解决办法

    问题 将DataFrame数据保存到mysql中时,出现错误提示: BLOB/TEXT column used in key specification without a key length 原因 ...

最新文章

  1. 《深入浅出iPhone/iPad开发(第2版)》——在Xcode中建立你的界面
  2. vuel路由间通讯_vue嵌套路由之间的通信(非vuex方法实现)
  3. java 获取_java获取类的信息
  4. 语言 OJ 高低位逆转_C语言调动硬件的原理是什么?
  5. win8.1和wp8.1共用代码,需要注意的一些问题
  6. vue项目配置eslint(附visio studio code配置)
  7. 布谷鸟沙盒分析静态文件_“案例沙盒方法”喜提国际商学院协会(AACSB)2019年启发式创新奖...
  8. 【Pytorch】 .item()==>得到元素张量里面的一个元素值,便可以循环、查看...操作
  9. html 样式初始化,css样式初始化
  10. 一直被唱衰的 Java 没“死”,却惨遭“忽视”!
  11. 简单的制作一个动态链接库(DLL)
  12. JavaScript 是如何工作的:WebRTC和对等网络的机制!
  13. [读书笔记]《Windows游戏编程之从零开始》(零)
  14. word批量打印工具,c#写的
  15. linux cat用法退出,Linux常用命令 - cat命令用法详解
  16. Mac上制作Mac os10.12.6启动盘的多次尝试
  17. js09 - Dev Tools Domination
  18. 关于LTE网络质量的参数
  19. 服务器芯片组驱动,Intel芯片组INF驱动9.1.1.1027 For Windows7
  20. UR首发丹宁无性别系列,并发布潮流丹宁大片及米卡限量礼盒

热门文章

  1. 3至六年级计算机知识,小学三至六年级下册信息技术教学计划范文
  2. linux7不能使用yum,CentOS7.6无法使用yum命令,无法更新解决方法
  3. carplay是否可以用安卓系统_Microsoft Teams正在支持CarPlay通话,我还是期待微信支持CarPlay...
  4. python fft函数_python scipy fft.fft用法及代码示例
  5. Spring Data JPA
  6. MVC中使用Tuple完成匿名类数据存储
  7. 深入理解java的异常处理机制
  8. [Javascript]js判断是否为undefined类型
  9. Varnish 安装部署
  10. 将10位时间戳转换成字符串格式时间显示