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 相关文章推荐
Win2003服务器安全加固设置--进一步提高服务器安全性
May 23 PHP
PHP 内存缓存加速功能memcached安装与用法
Sep 03 PHP
PHP 读取和修改大文件的某行内容的代码
Oct 30 PHP
php file_exists 检查文件或目录是否存在的函数
May 10 PHP
让PHP以ROOT权限执行系统命令的方法
Feb 10 PHP
基于php iconv函数的使用详解
Jun 09 PHP
php读取文件内容的几种方法详解
Jun 26 PHP
php实现aes加密类分享
Feb 16 PHP
laravel安装和配置教程
Oct 29 PHP
PHP 设计模式系列之 specification规格模式
Jan 10 PHP
PHP实现生成模糊图片的方法示例
Dec 21 PHP
php转换上传word文件为PDF的方法【基于COM组件】
Jun 10 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
海贼王动画变成“真人”后,凯多神还原,雷利太帅了!
2020/04/09 日漫
php 信息采集程序代码
2009/03/17 PHP
PHP 错误之引号中使用变量
2009/05/04 PHP
8个PHP程序员常用的功能汇总
2014/12/18 PHP
php写入数据到CSV文件的方法
2015/03/14 PHP
js 发个判断字符串是否为符合标准的函数
2009/04/27 Javascript
兼容IE和FF的图片上传前预览js代码
2013/05/28 Javascript
完美兼容各大浏览器获取HTTP_REFERER方法总结
2014/06/24 Javascript
兼容最新firefox、chrome和IE的javascript图片预览实现代码
2014/08/08 Javascript
JavaScript中的方法重载实例
2015/03/16 Javascript
JavaScript实现鼠标滑过处生成气泡的方法
2015/05/16 Javascript
jQuery.prop() 使用详解
2015/07/19 Javascript
js点击按钮实现水波纹效果代码(CSS3和Canves)
2016/09/15 Javascript
javascript cookie用法基础教程(概念,设置,读取及删除)
2016/09/20 Javascript
Bootstrap fileinput 上传新文件移除时触发服务器同步删除的配置
2018/10/08 Javascript
vue实现自定义日期组件功能的实例代码
2018/11/06 Javascript
详解Vue调用手机相机和相册以及上传
2019/05/05 Javascript
Vue实现push数组并删除的例子
2019/11/01 Javascript
vue 限制input只能输入正数的操作
2020/08/05 Javascript
[02:25]DOTA2英雄基础教程 虚空假面
2014/01/02 DOTA
在Python中使用defaultdict初始化字典以及应用方法
2018/10/31 Python
Python交互环境下打印和输入函数的实例内容
2020/02/16 Python
利用python在excel中画图的实现方法
2020/03/17 Python
python实现扫雷小游戏
2020/04/24 Python
Python -m参数原理及使用方法解析
2020/08/21 Python
HTML5超炫酷粒子效果的进度条的实现示例
2019/08/23 HTML / CSS
Electrolux伊莱克斯巴西商店:家用电器、小家电和配件
2018/05/23 全球购物
自荐信包含哪些内容
2013/10/30 职场文书
医院检讨书范文
2014/02/01 职场文书
潘婷洗发水广告词
2014/03/14 职场文书
《卖木雕的少年》教学反思
2014/04/11 职场文书
2015年中学元旦晚会活动方案
2014/12/09 职场文书
不同意离婚上诉状
2015/05/23 职场文书
音乐课《小猫钓鱼》教学反思
2016/02/18 职场文书
庭外和解协议书
2016/03/23 职场文书
Python+Selenium自动化环境搭建与操作基础详解
2022/03/13 Python