php session 写入数据库


Posted in PHP onFebruary 13, 2016

本文实例介绍了php session 写入数据库的方法,分享给大家供大家参考,具体内容如下

<?php
 
#
#  codeMaker Alpha 0.1.1 ( haowei.me )
#  This framework comply with the GPL license agreement
#
 
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中使用Oracle数据库(4)
Oct 09 PHP
php批量更改数据库表前缀实现方法
Oct 26 PHP
zend framework文件上传功能实例代码
Dec 25 PHP
PHP生成随机字符串(3种方法)
Sep 25 PHP
php语言的7种基本的排序方法
Dec 28 PHP
php微信开发之批量生成带参数的二维码
Jun 26 PHP
Netbeans 8.2与PHP相关的新特性介绍
Oct 08 PHP
php 5.4 全新的代码复用Trait详解
Jan 05 PHP
PHP编程求最大公约数与最小公倍数的方法示例
May 29 PHP
PHP实现链式操作的三种方法详解
Nov 16 PHP
如何解决PHP获取不到SESSION信息之一般情况
Oct 10 PHP
laravel5.6 框架邮件队列database驱动简单demo示例
Jan 26 PHP
php等比例缩放图片及剪切图片代码分享
Feb 13 #PHP
PHP信号量基本用法实例详解
Feb 12 #PHP
PHP消息队列用法实例分析
Feb 12 #PHP
PHP共享内存用法实例分析
Feb 12 #PHP
PHP连接MSSQL方法汇总
Feb 05 #PHP
Symfony2开发之控制器用法实例分析
Feb 05 #PHP
Symfony2实现在doctrine中内置数据的方法
Feb 05 #PHP
You might like
Yii2框架数据验证操作实例详解
2018/05/02 PHP
PHP defined()函数的使用图文详解
2019/07/20 PHP
Avengerls vs Newbee BO3 第一场2.18
2021/03/10 DOTA
js的闭包的一个示例说明
2008/11/18 Javascript
NodeJs中的非阻塞方法介绍
2012/06/05 NodeJs
jQuery中setTimeout的几种使用方法小结
2013/04/07 Javascript
js中数组(Array)的排序(sort)注意事项说明
2014/01/24 Javascript
js创建对象的区别示例介绍
2014/07/24 Javascript
JavaScript实现判断图片是否加载完成的3种方法整理
2015/03/13 Javascript
基于JavaScript代码实现随机漂浮图片广告
2016/01/05 Javascript
Bootstrap与KnockoutJs相结合实现分页效果实例详解
2016/05/03 Javascript
canvas实现钟表效果
2017/02/13 Javascript
Express系列之multer上传的使用
2017/10/27 Javascript
使用JavaScript解析URL的方法示例
2019/03/01 Javascript
原生js实现五子棋游戏
2020/05/28 Javascript
如何使用Javascript中的this关键字
2020/05/28 Javascript
Python中的map()函数和reduce()函数的用法
2015/04/27 Python
python 日志增量抓取实现方法
2018/04/28 Python
Python3.6.x中内置函数总结及讲解
2019/02/22 Python
Django如何开发简单的查询接口详解
2019/05/17 Python
Python3将数据保存为txt文件的方法
2019/09/12 Python
Pandas实现dataframe和np.array的相互转换
2019/11/30 Python
Python基础之变量基本用法与进阶详解
2020/01/03 Python
Python多线程Threading、子线程与守护线程实例详解
2020/03/24 Python
VSCode基础使用与VSCode调试python程序入门的图文教程
2020/03/30 Python
英国品牌男装折扣网站:Brown Bag
2018/03/08 全球购物
小学生红领巾广播稿
2014/01/21 职场文书
中学生演讲稿
2014/04/26 职场文书
销售岗位职责范本
2014/06/12 职场文书
房屋买卖协议书范本
2014/09/27 职场文书
2015年党员干部承诺书
2015/01/21 职场文书
天坛导游词
2015/02/02 职场文书
教师节座谈会主持词
2015/07/03 职场文书
关于职业道德的心得体会
2016/01/18 职场文书
Redis实现分布式锁的五种方法详解
2022/06/14 Redis
MySQL表字段数量限制及行大小限制详情
2022/07/23 MySQL