php重写session,重写session的保存机制!

当我们所做的系统相对来说比较大的时候,可能会用到session的共享机制!如呵实现session的共享,有很多的方法,但是,在php中,个人认为首先要实现对session的重写,才能进一步往下谈session的共享!

如果实现session的重写机制呢?php为我们提供了重写的函数,session_set_save_handle()我们只需要应用即可!

session_set_save_handler();

class Session

{

/* 操作数据库的db对象 */

private $_db = null;

/**

* 构造函数,连接数据库使用

*

* @access public

*/

public function __construct()

{

require '../Db/Db.class.php';

require '../Config/Config.php';

$this->_db = new Core_DB($config);

}

/**

* 开始session机制时自动调用,即调用session_start()后马上回调该函数

*

* @param string $sessionSavePath session文件的存储路径

* @param string $sessionName 默认为PHPSESSID

* @return boolan

* @access public

*/

public function open($sessionSavePath, $sessionName)

{

/* 我们也可以在这里连接数据库 */

return true;

}

/**

* 在脚本执行完毕后,在write回调之后,进行调用

*

* @access public

* @return boolean

*/

public function close()

{

mysql_close($this->_db->_connectid);

return true;

}

/**

* 开启session机制后自动调用,在open回调之后马上调用

*

* @param string $sessionID

* @return String

* @access public

*/

public function read($sessionID)

{

$returnData = '';

$sessionID = trim($sessionID);

$sql = " select * from session where session_id='$sessionID' ";

$sessionRecord = $this->_db->getToArray($sql);

if(is_array($sessionRecord)) {

$returnData = $sessionRecord['sessiondata'];

}

return $returnData;

}

/**

* 当脚本执行完毕后,回调该函数

*

* @param $sessionID string

* @param string $sessionData 要保存的session数据

* @return mixed

* @access public

*/

public function write($sessionID, $sessionData)

{

$result = false;

$sessionID = trim($sessionID);

$sessionData = trim($sessionData);

if(!empty($sessionData)) {

$addTime = date('Y-m-d H:i:s');

$sql = " select * from session where session_id = '$sessionID' ";

$sessionRecord = $this->_db->query($sql);//boolean

if(count($sessionRecord)) {//存在更新

$sql = " update session set sessionData = '$sessionData', addtime = '$addTime' where session_id = '$sessionID' ";

} else {//不存在,插入

$sql = " inset into session values ('$sessionID', '$sessionData', '$addTime') ";

}

$this->_db->query($sql);

}

return $result;

}

/**

* 当调用session_destory()函数的时候,对该函数进行回调

*

* @param string $sessioinID

* @return boolean

* @access public

*/

public function destory($sessionID)

{

$result = false;

$sql = " delete from session where session_id = '$sessionID' ";

$result = $this->_db->query($sql);

return $result;

}

/**

* session的垃圾回收机制,当session数据超过了静默时间,按照概率删除 默认概率:1/1000

*

* @param $maxliefttime 静默时间,默认为1440秒

* @access public

* @return boolean

*/

public function gc($maxlifetime)

{

$result = false;

$expireTime = time()-$maxlifetime;

$sql = " delete from session where addtime < $expireTime ";

$result = $this->_db->query($sql);

return $result;

}

}

$session = new Session();

session_set_save_handler(

array($session, 'open'),

array($session, 'close'),

array($session, 'read'),

array($session, 'write'),

array($session, 'destory'),

array($session, 'gc')

);

session_start();

?

d915356080d71a837ca9db08e792c930.png

3a4fca7cc79cd03e0d218f0e0d4a37a3.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值