PHP SESSION 共享 REDSI
公用文档
class redisSession{
/** * 保存session的数据库表的信息 */
private $_options = array( 'handler' => null, 'host' => null, 'port' => null, 'lifeTime' => null, 'prefix' => 'PHPREDIS_SESSION:' );
/**
* 构造函数
* @param $options 设置信息数组
*/
public function __construct($options = array())
{
if (!class_exists("redis", false)) {
die("必须安装redis扩展");
}
if (!isset($options['lifeTime']) || $options['lifeTime'] <= 0) {
$options['lifeTime'] = ini_get('session.gc_maxlifetime');
}
$this->_options = array_merge($this->_options, $options);
}
### 2
/**
* 开始使用该驱动的session
*/
public function begin()
{
if ($this->_options['host'] === null ||
$this->_options['port'] === null ||
$this->_options['lifeTime'] === null
) {
return false;
}
//设置session处理函数
session_set_save_handler(
array($this, 'open'),
array($this, 'close'),
array($this, 'read'),
array($this, 'write'),
array($this, 'destory'),
array($this, 'gc')
);
}
/**
* 自动开始回话或者session_start()开始回话后第一个调用的函数
* 类似于构造函数的作用
* @param $savePath 默认的保存路径
* @param $sessionName 默认的参数名,PHPSESSID
*/
public function open($savePath, $sessionName)
{
if (is_resource($this->_options['handler'])) return true;
//连接redis
$redisHandle = new Redis();
$redisHandle->connect($this->_options['host'], $this->_options['port']);
$redisHandle->auth($this->_options['password']);
if (!$redisHandle) {
return false;
}
$this->_options['handler'] = $redisHandle;
return true;
}
/**
* 类似于析构函数,在write之后调用或者session_write_close()函数之后调用
*/
public function close()
{
return $this->_options['handler']->close();
}
/**
* 读取session信息
* @param $sessionId 通过该Id唯一确定对应的session数据
* @return session信息/空串
*/
public function read($sessionId)
{
$sessionId = $this->_options['prefix'] . $sessionId;
return json_decode($this->_options['handler']->hget($this->_options['weizhi'],$sessionId));
}
/**
* 写入或者修改session数据
* @param $sessionId 要写入数据的session对应的id
* @param $sessionData 要写入的数据,已经序列化过了
*/
public function write($sessionId, $sessionData)
{
$sessionId = $this->_options['prefix'] . $sessionId;
$this->_options['handler']->hset($this->_options['weizhi'],$sessionId,json_encode($sessionData));
//设置redis 过期时间
$this->_options['handler']->expire($this->_options['weizhi'],$sessionId);
return true;
}
/**
* 主动销毁session会话
* @param $sessionId 要销毁的会话的唯一id
*/
public function destory($sessionId)
{
$sessionId = $this->_options['prefix'] . $sessionId;
return $this->_options['handler']->hdel($this->_options['weizhi'],$sessionId) >= 1 ? true : false;
}
/**
* 清理绘画中的过期数据
* @param 有效期
*/
public function gc($lifeTime)
{
//获取所有sessionid,让过期的释放掉
//$this->_options['handler']->keys("*");
return true;
}
调用
require(ROOT_PATH . 'includes/lib_session_redis.php');
$handler = new redisSession(array(
'host' => REDIS_HOST,
'port' => REDIS_POST,
'weizhi'=>'admin',
'password'=>PASSWORD
));
$handler->begin();
session_start();
公用文档放到指定位置,在根目录引入(根目录头部需要开始session_star() ,只要调用session 会自动执行公用文件)
版权声明:本文为lifei15731208550原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。