Heim  >  Artikel  >  php教程  >  PHP-Sitzung schreibt in die Datenbank

PHP-Sitzung schreibt in die Datenbank

大家讲道理
大家讲道理Original
2016-11-08 14:00:39887Durchsuche

<?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[&#39;host&#39;], 
        $this->config[&#39;user&#39;], 
        $this->config[&#39;password&#39;], 
        $this->config[&#39;database&#39;]);
        mysqli_set_charset($this->link, "utf8");
        $sql = &#39;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;&#39;;
        $sql = sprintf($sql, $this->config[&#39;table&#39;]);
        mysqli_query($this->link, $sql);
        return true;
    }
     
    public function close() {
        return true;
    }
     
     
    public function read($session_id) {
        if(empty($session_id)) return null;
         
        $sql = &#39;SELECT `session_data` AS `data` FROM `%s` WHERE `session_id` = "%s" AND `session_expires` > "%u"&#39;;
        $sql = sprintf($sql, 
        mysqli_real_escape_string($this->link, $this->config[&#39;table&#39;]), 
        mysqli_real_escape_string($this->link, $session_id),
        time());
         
        $result = mysqli_query($this->link, $sql);
        $row = mysqli_fetch_assoc($result);
        return $row[&#39;data&#39;];
         
    }
     
    public function write($session_id, $session_data) {
        if(empty($session_id)) return null;
         
        $newExpires = time() + $this->maxlifetime;
        $sql = &#39;REPLACE INTO `%s` SET `session_id` = "%s", `session_data` = "%s", `session_expires` = "%u"&#39;;
        $sql = sprintf($sql, 
        mysqli_real_escape_string($this->link, $this->config[&#39;table&#39;]), 
        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 = &#39;DELETE FROM `%s` WHERE `session_id` = "%s"&#39;;
        $sql = sprintf($sql, 
        mysqli_real_escape_string($this->link, $this->config[&#39;table&#39;]), 
        mysqli_real_escape_string($this->link, $session_id));
 
        $result = mysqli_query($this->link, $sql);
        return mysqli_affected_rows($this->link);
    }
     
    public function gc() {
        $sql = &#39;DELETE FROM `%s` WHERE `session_expires` < "%u"&#39;;
        $sql = sprintf($sql, 
        mysqli_real_escape_string($this->link, $this->config[&#39;table&#39;]), 
        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));

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn