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 相关文章推荐
Linux下将excel数据导入到mssql数据库中的方法
Feb 08 PHP
php去除换行符的方法小结(PHP_EOL变量的使用)
Feb 16 PHP
JS异常处理try..catch语句的作用和实例
May 05 PHP
php使用session二维数组实例
Nov 06 PHP
php一个解析字符串排列数组的方法
May 12 PHP
Yii扩展组件编写方法实例分析
Jun 29 PHP
php实现数组中索引关联数据转换成json对象的方法
Jul 08 PHP
thinkphp微信开发(消息加密解密)
Dec 02 PHP
php array_reverse 以相反的顺序返回数组实例代码
Apr 11 PHP
微信公众号实现会员卡领取功能
Jun 08 PHP
PHP7.1实现的AES与RSA加密操作示例
Jun 15 PHP
PHP微信H5支付开发实例
Jul 25 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查看session内容的函数
2008/08/27 PHP
php正则表达式使用的详细介绍
2013/04/27 PHP
document.compatMode介绍
2009/05/21 Javascript
通过上下左右键和回车键切换光标实现代码
2013/03/08 Javascript
javascript验证只能输入数字和一个小数点示例
2013/10/21 Javascript
JavaScript实现多维数组的方法
2013/11/20 Javascript
JS创建自定义表格具体实现
2014/02/11 Javascript
使用原生js封装webapp滑动效果(惯性滑动、滑动回弹)
2014/05/06 Javascript
javascript删除一个html元素节点的方法
2014/12/20 Javascript
window.open()实现post传递参数
2015/03/12 Javascript
Javascript实现div层渐隐效果的方法
2015/05/30 Javascript
js实现不重复导入的方法
2016/03/02 Javascript
JS中正则表达式只有3种匹配模式(没有单行模式)详解
2016/07/28 Javascript
Angular.js实现注册系统的实例详解
2016/12/18 Javascript
js解决软键盘遮挡输入框的问题分享
2017/12/19 Javascript
Vue.js实现表格渲染的方法
2018/09/07 Javascript
原生JS实现的自动轮播图功能详解
2018/12/28 Javascript
javascript定时器的简单应用示例【控制方块移动】
2019/06/17 Javascript
python实现从ftp服务器下载文件的方法
2015/04/30 Python
教大家玩转Python字符串处理的七种技巧
2017/03/31 Python
代码分析Python地图坐标转换
2018/02/08 Python
代码讲解Python对Windows服务进行监控
2018/02/11 Python
python购物车程序简单代码
2018/04/18 Python
Django之使用内置函数和celery发邮件的方法示例
2019/09/16 Python
Django的CVB实例详解
2020/02/10 Python
基于jupyter代码无法在pycharm中运行的解决方法
2020/04/21 Python
Python尾递归优化实现代码及原理详解
2020/10/09 Python
css3 pointer-events 介绍详解
2017/09/18 HTML / CSS
法学专业应届生求职信
2013/10/16 职场文书
餐饮收银员岗位职责
2014/02/07 职场文书
亲子拓展活动方案
2014/02/20 职场文书
保险公司年会主持词
2014/03/22 职场文书
工作年限证明模板
2014/11/01 职场文书
男方婚礼答谢词
2015/01/20 职场文书
学校计划生育责任书
2015/05/09 职场文书
女儿满月酒致辞
2015/07/29 职场文书