defined('BASEPATH')) exit('No direct script access allowed');
// * session操作类库--可直接用语ci框架
// * 需安装phpredis模块
// * 基于cookie、redis
class Session {
var $redis; //redis连接
var $sso_session; //session_id
var $CI; //CI实例
var $cookie_name = 'sso_session';
var $cookie_path = '/';//cookie 保存目录
var $cookie_domain = '.peng7.com'; //cookie 保存的域
var $expire = 300; //过期时间(秒)
var $session_folder = 'sso_';//session_id的前缀
public function __construct(){
//* 构造方法
//* 连接redis
//* 产生session_id
$redis = new Redis();
$flag = $redis->connect($IP,$PORT);
if(!$flag){
exit("redis连接失败!");
}
$redis->select(0);
$redis->auth('');
$this->redis = $redis;
if(isset($_COOKIE[$this->cookie_name])){
$this->sso_session=$_COOKIE[$this->cookie_name];
}else{
//在IE6下的iframe无法获取到cookie,于是使用get方式传递cookie_name
if(isset($_GET[$this->cookie_name])){
$this->sso_session=$_GET[$this->cookie_name];
} else {
$this->sso_session=$this->session_folder.md5(uniqid(rand(),
true));
}
}
unset($redis,$hostArr);
}
//设置和更新session、cookie的过期时间
function sess_expiration($flag = FALSE){
if($flag){
$expiretime =
$this->redis->TTL($this->sso_session);
if($expiretime < 0){
return;
}
}
setcookie($this->cookie_name,$this->sso_session,time()+$this->expire,$this->cookie_path,$this->cookie_domain);
$this->redis->EXPIRE($this->sso_session,
$this->expire);
}
//* 创建session
//* $parms string/array
//* 同时赋予session、cookie过期时间
function set_userdata($parms,$value=''){
if(is_array($parms)){
$this->redis->hMset($this->sso_session,$parms);
}else{
$this->redis->hSet($this->sso_session,$parms,$value);
}
$this->sess_expiration();
}
//* 根据key获取session值
//* 若session已过期则返回空
//* 未过期将session、cookie的过期时间更新
function userdata($key){
$this->sess_expiration(TRUE);
return
$this->redis->hGet($this->sso_session,$key);
}
//* 返回所有的session
//* return array
function all_userdata(){
$this->sess_expiration(TRUE);
return
$this->redis->hGetAll($this->sso_session);
}
//* 删除单个session
function unset_userdata($key){
return
$this->redis->hDel($this->sso_session,$key);
}
//* 清空session
function sess_destroy(){
setcookie($this->cookie_name,$this->sso_session,time()-3600,$this->cookie_path,$this->cookie_domain);
return
$this->redis->DEL($this->sso_session);
}
}