php session 写入数据库

本文实例介绍了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));

以上就是本文的全部内容,希望对大家的学习有所帮助。

(0)

相关推荐

  • php把session写入数据库示例

    复制代码 代码如下: <?phpclass 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;  $t

  • PHP用mysql数据库存储session的代码

    隐患一:如果客户端机器的cookie一旦因病毒而失效了,那么session也就相当于没有了. 隐患二:session在php中默认的是以文件的形式保存在一个临时文件夹里面的,对于一个小型系统来说,这样做完全可以, 可是对于一个大型而又被经常访问的系统来说,就不是很好的办法了.假设这个网站一天有1000个人访问.一个月以后session的临时文件夹就会有30000个临时文件.想象一下计算机要从30000里面找一条session_sid是一个多么漫长的事情呀! 因此为了提高效率. 交易使用用数据库保

  • Session保存到数据库的php类分享

    复制代码 代码如下: <?php class SessionToDB { private $_path = null; private $_name = null; private $_pdo = null; private $_ip = null; private $_maxLifeTime = 0; public function __construct(PDO $pdo) { session_set_save_handler( array(&$this, 'open'), array(

  • php基于session实现数据库交互的类实例

    本文实例讲述了php基于session实现数据库交互的类.分享给大家供大家参考.具体如下: <?php /** * session 数据库存储类 */ class Session { private static $session_id = 0; private static $session_data = array(); private static $is_update = FALSE; private static $is_del = FALSE; private static $is_

  • php中使用session_set_save_handler()函数把session保存到MySQL数据库实例

    PHP保存session默认的是采用的文件的方式来保存的,这仅仅在文件的空间开销很小的windows上是可以采用的,但是如果我们采用uinx或者是liux上的文件系统的时候,这样的文件系统的文件空间开销是很大的,然而session是要时时刻刻的使用的,大量的用户就要创建很多的session文件,这样对整个的服务器带来性能问题. 另一方面,如果服务器起采用群集的方式的话就不能保持session的一致性,所以我们就绪要采用数据库的方式来保存session,这样,不管有几台服务器同时使用,只要把他们的

  • PHP将session信息存储到数据库的类实例

    本文实例讲述了PHP将session信息存储到数据库的类.分享给大家供大家参考.具体分析如下: SessionHandlerInterface接口是PHP内置的接口,直接实现就行了 具体可以看php手册关于session_set_save_handler函数的解释! PHP代码如下: 复制代码 代码如下: /** * session信息存储到数据库的类 * 表结构: * CREATE TABLE IF NOT EXISTS `sessioninfo` ( *  `sid` varchar(255

  • PHP封装的数据库保存session功能类

    本文实例讲述了PHP封装的数据库保存session功能类.分享给大家供大家参考,具体如下: PHP用数据库保存session类: <?php class SafeSessionHandler implements SessionHandlerInterface { public $save_path; public $session_name; public $table; public function __construct() { $this->table = new Table(&qu

  • PHP独立Session数据库存储操作类分享

    直接上代码: 复制代码 代码如下: class DbSession{ const TYPE_INT = 1;    const TYPE_STR = 2; /**     * Database configration     *     * @var array     */    private $_config = array(            'host' => '127.0.0.1′,            'port' => 3306,            'usernam

  • 将PHP的session数据存储到数据库中的代码实例

    一个开发环境有多个网站,需要使用不同的session,解决方案很多.不过这次也高大上一把,用数据库存,方便以后扩展. PostgreSQL版 首先是数据库的部分 --drop table php_session create unlogged table php_session ( sess_id varchar(32) primary key, modify_time timestamp with time zone not null, sess_data varchar(3000) defa

  • php实现将Session写入数据库

    使用session_set_save_handler()函数,将Session的内容写入数据库 <?php /* *@author Fahy *数据库为mysql, *数据库名为session,表名为session, *表中字段包括PHPSESSID,update_time,client_ip,data */ class Session{ private static $handler = null; private static $ip = null; private static $life

随机推荐