<?php
namespace dollarphp;
use Medoo\Medoo;
/**
* @desc:session類(lèi)
* @author [Lee] <[<complet@163.com>]>
*/
class SessionDeal{
private $database; // 數(shù)據(jù)庫(kù)對(duì)象
private $redis; // redis對(duì)象
public $config_db = array( // 數(shù)據(jù)庫(kù)配置
'database_type' => 'MySQL', # 數(shù)據(jù)庫(kù)類(lèi)型
'database_name' => 'test', # 數(shù)據(jù)庫(kù)名
'server' => 'localhost', # 主機(jī)
'username' => 'root', # 用戶名
'password' => '123456', # 密碼
'port' => 3306, # 端口
'charset' => 'utf8' # 字符集
);
public $config_rs = array( // redis配置
'host' => 'x.x.x.x', # 主機(jī)
'port' => 'xx', # 端口
'pass' => 'xxxx' # 密碼
);
/*
session初始化函數(shù)(實(shí)例化數(shù)據(jù)庫(kù)對(duì)象和redis對(duì)象)
*/
function open(){
$config_db = $this->config_db;
$config_rs = $this->config_rs;
$database = new Medoo($config_db);
$redis = new phpredis($config_rs);
$this->database = $database;
$this->redis = $redis;
return true;
}
/*
寫(xiě)入session
@param id sessionID
@param val session值
@param expire 超時(shí)時(shí)間 單位:秒
*/
function write($id,$val,$expire){
$database = $this->database;
$redis = $this->redis;
$db_expire = $expire + time();
$rs_expire = $expire;
$sql = "insert into `session` (id,value,expire) values ('{$id}','{$val}','{$db_expire}')";
$ret_db = $database->query($sql)->rowCount();
$ret_rs = $redis->rsetexp($id,$val,$rs_expire);
return true;
}
/*
獲取session值
@param id sessionID
@return val session值
*/
function read($id){
$database = $this->database;
$redis = $this->redis;
$time = time();
$ret_rs = $redis->rget($id);
if($ret_rs){ // 如果redis中有值
$val = $ret_rs;
}else{ // 否則從數(shù)據(jù)庫(kù)中取值
$sql = "select value from `session` where id='{$id}' and expire<{$time}";
$ret_db = $database->query($sql)->fetchColumn();
$val = $ret_db;
}
return $val;
}
/*
銷(xiāo)毀session(刪除數(shù)據(jù)庫(kù)中的session)
@param id sessionID
*/
function destroy($id){
$database = $this->database;
$redis = $this->redis;
$ret_rs = $redis->rdel($id);
$sql = "delete from `session` where id='{$id}'";
$ret_db = $database->query($sql)->rowCount();
if($ret_rs && $ret_db){
return true;
}else{
return false;
}
}
/*
session關(guān)閉函數(shù)(相當(dāng)于析構(gòu)函數(shù),可以做數(shù)據(jù)庫(kù)關(guān)閉操作)
*/
function close(){
$database = $this->database;
$redis = $this->redis;
$database->close();
$redis->close();
return true;
}
/*
垃圾回收(不定期銷(xiāo)毀過(guò)期session)
@param maxtime 最大時(shí)間
*/
function gc($maxtime){
return true;
}
}
// $handler = new SessionDeal();
// session_set_save_handler(
// array($handler, 'open'),
// array($handler, 'close'),
// array($handler, 'read'),
// array($handler, 'write'),
// array($handler, 'destroy'),
// array($handler, 'gc')
// );
// register_shutdown_function('session_write_close');
// session_start();
// $_SESSION['name'] = 'value';
// $ret = $_SESSION['name'];
// echo $ret.PHP_EOL;
當(dāng)前文章:phpsession類(lèi)
瀏覽路徑:http://www.rwnh.cn/article18/jiedgp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)、網(wǎng)站收錄、商城網(wǎng)站、動(dòng)態(tài)網(wǎng)站、網(wǎng)站設(shè)計(jì)公司、面包屑導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)