无法使用 session_set_save_handler 将SESSION存入数据库,网上说 必须z使用 session_module_name('user')
但是报一下错误,
Warning: session_module_name() [function.session-module-name]: A session is active. You cannot change the session module's ini settings at this time. session数据库
但是报一下错误,
Warning: session_module_name() [function.session-module-name]: A session is active. You cannot change the session module's ini settings at this time. session数据库
不需要再执行 session_module_name('user')
一般指派了回调函数后,都会 session_start()
这样由于 session 已经启动,你再 session_module_name('user') 也就不行了
使用session_set_save_handler 的时候还需要配置么?这一块的不是很清楚。
从网上也查了好多资料 基本上都是一样的,但是在我这里就是不行。这是我的session类
class session extends ms_model{
var $expiry=3600;
var $table='';
var $sid='';
var $key = 'session_key';
//$sid
function __construct(){
parent::__construct();
//$this->sid=$sid;
session_set_save_handler(
array (& $this, "_session_open"),
array (& $this, "_session_close"),
array (& $this, "_session_read"),
array (& $this, "_session_write"),
array (& $this, "_session_destroy"),
array (& $this, "_session_gc")
);
}
/**
* open session handler
*
* @param string $save_path
* @param string $session_name
* @return boolen
*/
function _session_open($save_path, $session_name){
$this->table='dbpre_session';
return TRUE;
}
function _session_close(){
return true;
}
function _session_read($key){
$expiry=time();
$where['session_key']=$key;
$where['session_expiry']=$expiry;
$result=parent::find('*',$where);
return $result[1];
}
function _session_write($key,$data){
$expiry_time=time()+$this->expiry;
$post['session_key']=$key;
$result=parent::read($key,'session_data');
if(!$result){
$key=null;
}
$post['session_expiry']=$expiry_time;
$post['session_data']=$data;
//$post['sid']=$this->sid;
$result=parent::save($post,$key,0,0,0);
return $result;
}
function _session_destroy($key=null){
if($key){
parent::delete($key);
}else{
$this->db->from($this->table);
//$this->db->where('sid',$this->sid);
$this->db->delete();
}
return true;
}
function _session_gc($expiry_time){
$expiry_time=time();
$this->db->where('session_expiry',$expiry_time);
parent::delete();
return true;
}
}
2、你都 __construct()(显然是php5了) 了,再 array (& $this, "_session_open") 这样就可能引发一个错误(php 5 > 5.3)
session_start();之后我在 session_set_save_handler() 前面和后面都可以输出值,但是在每个方法里面都不行,就感觉没有执行 session_set_save_handler() 一样,直接跳过了
<?php
/**
* Session 数据库存储
* @author BlueRaven.126.com
*
*/
class session extends ms_model{
var $expiry=3600;
var $table='';
var $sid='';
var $key = 'session_key';
//$sid
function __construct($sid){
parent::__construct();
$this->sid=$sid; session_set_save_handler(
array (& $this, "_session_open"),
array (& $this, "_session_close"),
array (& $this, "_session_read"),
array (& $this, "_session_write"),
array (& $this, "_session_destroy"),
array (& $this, "_session_gc")
);
//session_set_save_handler('_session_open','_session_close','_session_read','_session_write','_session_destroy','_session_gc'); }
/**
* open session handler
*
* @param string $save_path
* @param string $session_name
* @return boolen
*/
function _session_open($save_path, $session_name){
$this->table='dbpre_session';
return TRUE;
}
function _session_close(){
return false;
}
function _session_read($key=null){
//$expiry=time();
if($key){
$where['session_key']=$key;
}
//$where['session_expiry']=$expiry;
$result=parent::read($key,'session_data');
return $result?$result['session_data']:'';
} function _session_write($key,$data){
//$now_session=$this->_session_read($key);
if($data){
$post['session_data']=$data;
}
$expiry_time=time();
$post['session_key']=$key;
$result=parent::read($key,'session_data');
if(!$result){
$key=null;
}
$post['session_expiry']=$expiry_time;
$post['sid']=$this->sid;
$result=parent::save($post,$key,0,0,0);
return $result;
}
function _session_destroy($key=null){
if($key){
parent::delete(array($key));
}else{
$this->db->from($this->table);
$this->db->where('sid',$this->sid);
$this->db->delete();
}
return true;
}
function _session_gc($expiry_time){
$expiry_time=$expiry_time?$expiry_time:time();
$expiry_time+=$this->expiry;
$where=array();
$where['session_expiry']<$expiry_time;
$where['sid']=$this->sid;
$this->db->where($where);
$this->db->delete();
return true;
}
}
/*a.php*/
$sid=1;
$_ses_=new Session($sid);
/**********************/ session_start();
$_SESSION['user']='BlueRaven';
$_SESSION['uid']='007';
$sessionid=session_id();
echo $sessionid;
echo '<pre>';var_dump($_SESSION);
/*b.php*/ $sid=1;
$_ses_=new session($sid);
$sessionid='33ad8a78ade44cd0f412498dde73ac12'; /*这是a.php 生成的SESSION ID*/
session_id($sessionid);
session_start(); //echo session_id(); echo '<pre>';
var_dump($_SESSION);die;