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 相关文章推荐
mysql5写入和读出乱码解决
Nov 25 PHP
PHP 读取和修改大文件的某行内容的代码
Oct 30 PHP
php is_file()和is_dir()用于遍历目录时用法注意事项
Mar 02 PHP
php中几种常见安全设置详解
Apr 06 PHP
PHP 全角转半角实现代码
May 16 PHP
PHP 删除一个目录及目录下的所有文件的函数代码
May 26 PHP
php使用cookie实现记住登录状态
Apr 27 PHP
php文件上传你必须知道的几点
Oct 20 PHP
php获取远程文件的内容和大小
Nov 03 PHP
[原创]php常用字符串输出方法分析(echo,print,printf及sprintf)
Jul 09 PHP
laravel 5.4 + vue + vux + element的环境搭配过程介绍
Apr 26 PHP
PHP实现考试倒计时功能代码
Apr 16 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
多重?l件?合查?(二)
2006/10/09 PHP
php error_log 函数的使用
2009/04/13 PHP
PHP设计模式之调解者模式的深入解析
2013/06/13 PHP
smarty简单应用实例
2015/11/03 PHP
jQuery中append、insertBefore、after与insertAfter的简单用法与注意事项
2020/04/04 Javascript
js分解url参数(面向对象-极简主义法应用)
2012/08/09 Javascript
js去空格技巧分别去字符串前后、左右空格
2013/10/21 Javascript
js QQ客服悬浮效果实现代码
2014/12/12 Javascript
分享一个自己写的简单的javascript分页组件
2015/02/15 Javascript
javascript中typeof操作符和constucor属性检测
2015/02/26 Javascript
jquery比较简洁的软键盘特效实现方法
2015/03/19 Javascript
Javascript中使用parseInt函数需要注意的问题
2015/04/02 Javascript
JS中的THIS和WINDOW.EVENT.SRCELEMENT详解
2015/05/25 Javascript
jQuery 获取遍历获取table中每一个tr中的第一个td的方法
2016/10/05 Javascript
浅谈Angular4中常用管道
2017/09/27 Javascript
vue-cli开发环境实现跨域请求的方法
2018/04/07 Javascript
Vue在页面右上角实现可悬浮/隐藏的系统菜单
2018/05/04 Javascript
vue.js template模板的使用(仿饿了么布局)
2018/08/13 Javascript
原生JS实现的简单轮播图功能【适合新手】
2018/08/17 Javascript
[01:08:48]LGD vs OG 2018国际邀请赛淘汰赛BO3 第三场 8.25
2018/08/29 DOTA
[47:03]完美世界DOTA2联赛PWL S3 access vs LBZS 第一场 12.20
2020/12/23 DOTA
为什么选择python编程语言入门黑客攻防 给你几个理由!
2018/02/02 Python
Python文件读写保存操作的示例代码
2018/09/14 Python
python按时间排序目录下的文件实现方法
2018/10/17 Python
pytorch索引查找 index_select的例子
2019/08/18 Python
python 多进程队列数据处理详解
2019/12/23 Python
K近邻法(KNN)相关知识总结以及如何用python实现
2021/01/28 Python
英国在线自行车商店:Evans Cycles
2016/09/26 全球购物
Roots加拿大官网:加拿大休闲服饰品牌
2016/10/24 全球购物
小学运动会广播稿200字(十二篇)
2014/01/14 职场文书
深度好文:50条没人告诉你的人生经验,句句精辟
2019/08/22 职场文书
Java中使用Filter过滤器的方法
2021/06/28 Java/Android
工厂无线对讲系统解决方案
2022/02/18 无线电
24年收藏2000多部退役军用电台
2022/02/18 无线电
2021好看的国漫排行榜前十名 《完美世界》上榜,《元龙》排名第一
2022/03/18 国漫
flex布局中使用flex-wrap实现换行的项目实践
2022/06/21 HTML / CSS