php把session写入数据库示例


Posted in PHP onFebruary 26, 2014
<?php
class session_handler { protected $maxlifetime = null;
 protected $dbHandle = null;
 public $config = null;
 public static function init($args) {
  return new self($args);
 }
 public function __construct($args) {
  $this->config = $args;
  $this->maxlifetime = get_cfg_var("session.gc_maxlifetime");
  session_set_save_handler(
  array($this, "open"),
  array($this, "close"),
  array($this, "read"),
  array($this, "write"),
  array($this, "destroy"),
  array($this, "gc"));
 }
 public function open() {
  $this->link = mysqli_connect(
  $this->config['host'], 
  $this->config['user'], 
  $this->config['password'], 
  $this->config['database']);
  mysqli_set_charset($this->link, "utf8");
  $sql = 'CREATE TABLE IF NOT EXISTS `%s` (
  `session_id` varchar(255) NOT NULL,
  `session_data` text,
  `session_expires` char(10) NOT NULL,
  PRIMARY KEY (`session_id`)
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;';
  $sql = sprintf($sql, $this->config['table']);
  mysqli_query($this->link, $sql);
  return true;
 }
 public function close() {
  return true;
 }
 
 public function read($session_id) {
  if(empty($session_id)) return null;
  $sql = 'SELECT `session_data` AS `data` FROM `%s` WHERE `session_id` = "%s" AND `session_expires` > "%u"';
  $sql = sprintf($sql, 
  mysqli_real_escape_string($this->link, $this->config['table']), 
  mysqli_real_escape_string($this->link, $session_id),
  time());
  $result = mysqli_query($this->link, $sql);
  $row = mysqli_fetch_assoc($result);
  return $row['data'];
 }
 public function write($session_id, $session_data) {
  if(empty($session_id)) return null;
  $newExpires = time() + $this->maxlifetime;
  $sql = 'REPLACE INTO `%s` SET `session_id` = "%s", `session_data` = "%s", `session_expires` = "%u"';
  $sql = sprintf($sql, 
  mysqli_real_escape_string($this->link, $this->config['table']), 
  mysqli_real_escape_string($this->link, $session_id),
  mysqli_real_escape_string($this->link, $session_data),
  $newExpires);
  $result = mysqli_query($this->link, $sql);
  return mysqli_affected_rows($this->link);
    }
 public function destroy($session_id) {
  $sql = 'DELETE FROM `%s` WHERE `session_id` = "%s"';
  $sql = sprintf($sql, 
  mysqli_real_escape_string($this->link, $this->config['table']), 
  mysqli_real_escape_string($this->link, $session_id));

  $result = mysqli_query($this->link, $sql);
  return mysqli_affected_rows($this->link);
    }
 public function gc() {
  $sql = 'DELETE FROM `%s` WHERE `session_expires` < "%u"';
  $sql = sprintf($sql, 
  mysqli_real_escape_string($this->link, $this->config['table']), 
  time());
  $result = mysqli_query($this->link, $sql);
  return mysqli_affected_rows($this->link);
    }
}
class session {
 public static $collection = null;
 public static function open($clean = false, $token = false) {
  if($clean) ob_end_clean();
  if($token) session_id($token);
  session_start();
  self::$collection = $_SESSION;
 }
 public static function id() {
  $num_args = func_num_args();
  if($num_args) {
   $args = func_get_arg(0);
   return session_id($args);
  }else{
   return session_id();
  }
 }
 public static function get($name) {
  return isset($_SESSION[$name]) ? $_SESSION[$name] : null;
 }
 public static function set($name, $value) {
  $_SESSION[$name] = $value;
  return true;
 }
 public static function delete($name) {
  if(!isset($_SESSION[$name])) return null;
  unset($_SESSION[$name]);
  return true;
 }
 public static function destroy() {
  session_destroy();
 }
}
$config = array(
"host"=> "127.0.0.1",
"user"=> "root",
"password"=> "123456",
"database"=> "test",
"charset"=> "utf8",
"table"=> "user_session");
session_handler::init($config);
session::open();
session::set("profile", array("id"=> 1, "user"=> "haowei", "vip-level"=> 6));
PHP 相关文章推荐
PHP XML error parsing SOAP payload on line 1
Jun 17 PHP
sphinx增量索引的一个问题
Jun 14 PHP
无法在发生错误时创建会话,请检查 PHP 或网站服务器日志,并正确配置 PHP 安装(win+linux)
May 05 PHP
PHP APC配置文件2套和参数详解
Jun 11 PHP
php密码生成类实例
Sep 24 PHP
PHP判断是否为空的几个函数对比
Apr 21 PHP
理解PHP中的Session及对Session有效期的控制
Jan 08 PHP
PHP生成各种常见验证码和Ajax验证过程
Jan 10 PHP
24条货真价实的PHP代码优化技巧
Jul 28 PHP
php获取远程图片并下载保存到本地的方法分析
Oct 08 PHP
利用PHPStorm如何开发Laravel应用详解
Aug 30 PHP
PHP检查文件是否存在,不存在自动创建及读取文件内容操作示例
Jan 23 PHP
php操作mysql数据库的基本类代码
Feb 25 #PHP
php获取bing每日壁纸示例分享
Feb 25 #PHP
php异常处理使用示例
Feb 25 #PHP
php反射应用示例
Feb 25 #PHP
php数组去重复数据示例
Feb 25 #PHP
php分页函数示例代码分享
Feb 24 #PHP
php对数组排序代码分享
Feb 24 #PHP
You might like
一步一步学习PHP(6) 面向对象
2010/02/16 PHP
PHP实现动态柱状图改进版
2015/03/30 PHP
php生成rss类用法实例
2015/04/14 PHP
php自定义类fsocket模拟post或get请求的方法
2015/07/31 PHP
PHP CURL与java http使用方法详解
2018/01/26 PHP
javascript 客户端验证上传图片的大小(兼容IE和火狐)
2009/08/15 Javascript
用Greasemonkey 脚本收藏网站会员信息到本地
2009/10/26 Javascript
让mayfish支持mysqli数据库驱动的实现方法
2010/05/22 Javascript
jquery.jstree 增加节点的双击事件代码
2010/07/27 Javascript
js删除所有的cookie的代码
2010/11/25 Javascript
JavaScript对象之间的转换 jQuery对象和原声DOM
2011/03/07 Javascript
js中scrollHeight,scrollWidth,scrollLeft,scrolltop等差别介绍
2012/05/16 Javascript
jQuery JSON实现无刷新三级联动实例探讨
2013/05/28 Javascript
高效率JavaScript编写技巧整理
2013/08/23 Javascript
JavaScript实现的石头剪刀布游戏源码分享
2014/08/22 Javascript
javascript模拟实现ajax加载框实例
2014/10/15 Javascript
简单实现jQuery级联菜单
2017/01/09 Javascript
js实现九宫格的随机颜色跳转
2017/02/19 Javascript
微信小程序实现选项卡功能
2020/06/19 Javascript
微信小程序整合使用富文本编辑器的方法详解
2019/04/25 Javascript
[01:04:14]VP vs TNC 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
Python简单进程锁代码实例
2015/04/27 Python
python 3.5下xadmin的使用及修复源码bug
2017/05/10 Python
python 实现数据库中数据添加、查询与更新的示例代码
2020/12/07 Python
详解HTML5中垂直上下居中的解决方案
2017/12/20 HTML / CSS
来自世界上最好大学的在线课程:edX
2018/10/16 全球购物
金山毒霸系列的笔试题
2013/04/13 面试题
庆八一活动方案
2014/01/25 职场文书
毕业寄语大全
2014/04/09 职场文书
大气污染防治方案
2014/05/19 职场文书
七夕相亲活动策划方案
2014/08/31 职场文书
群众路线教育实践活动批评与自我批评
2014/09/15 职场文书
优秀教师自我评价范文
2014/09/27 职场文书
专题组织生活会发言材料
2014/10/17 职场文书
Python中OpenCV实现查找轮廓的实例
2021/06/08 Python
vue ref如何获取子组件属性值
2022/03/31 Vue.js