php改写session到数据库
2015-12-22 20:19
686 查看
session改写mysql
在调用 session_start();的地方改用实例化本类即可new SessionDB();
session_set_save_handler(
'userSessionBegin',
'userSessionEnd',
'userSessionRead',
'userSessionWrite',
'userSessionDelete',
'userSessionGC')
gc回收器调用次数改写
在调用 session_start();的地方改用实例化本类即可new SessionDB();
session_set_save_handler( array($this, 'userSessionBegin'), array($this, 'userSessionEnd'), array($this, 'userSessionRead'), array($this, 'userSessionWrite'), array($this, 'userSessionDelete'), array($this, 'userSessionGC') );如果是类里要这样写,因为要明确是哪个类的方法如果在类外可以这样写
session_set_save_handler(
'userSessionBegin',
'userSessionEnd',
'userSessionRead',
'userSessionWrite',
'userSessionDelete',
'userSessionGC')
<?php /** * session入库工具类 */ class SessionDB { private $_dao; public function __construct() { //设置session处理器 ini_set('session.save_handler', 'user'); session_set_save_handler( array($this, 'userSessionBegin'), array($this, 'userSessionEnd'), array($this, 'userSessionRead'), array($this, 'userSessionWrite'), array($this, 'userSessionDelete'), array($this, 'userSessionGC') ); //开启 session_start(); } function userSessionBegin() { //初始化DAO $config = array('host' => '127.0.0.1', 'port' => '3306', 'username'=>'shop34', 'password' => '1234abcd', 'charset'=>'utf8', 'dbname'=>'shop34'); $this->_dao = MySQLDB::getInstance($config); } function userSessionEnd() { return true; } /** * 读操作 * 执行时机: session机制开启程中执行 * 工作: 从当前session数据区读取内容 * @param $sess_id string * @return string */ function userSessionRead($sess_id) { //查询 $sql = "SELECT session_content FROM `p34_session` WHERE session_id='$sess_id'"; return (string) $this->_dao->getOne($sql); } /** * 写操作 * 执行时机: 脚本周期结束时,PHP在整理收尾时 * 工作: 将当前脚本处理好的session数据,持久化存储到数据库中! * @param $sess_id string * @param $sess_content string 序列化好的session内容字符串 * @return bool */ function userSessionWrite($sess_id, $sess_content) { // 完成写 $sql = "REPLACE INTO `p34_session` VALUES ('$sess_id', '$sess_content', unix_timestamp())"; return $this->_dao->query($sql); } /** * 删除操作 * 执行时机: 调用了session_destroy()销毁session过程中被调用 * 工作: 删除当前session的数据区(记录) * @param $sess_id string * @return bool */ function userSessionDelete($sess_id) { //删除 $sql = "DELETE FROM `p34_session` WHERE session_id='$sess_id'"; return $this->_dao->query($sql); } /** * 垃圾回收操作 * 执行时机: 开启session机制时,有概率的执行 * 工作: 删除那些过期的session数据区 * @param $max_lifetime * @return bool */ function userSessionGC($max_lifetime) { //删除 $sql = "DELETE FROM `p34_session` WHERE last_time<unix_timestamp()-$max_lifetime"; return $this->_dao->query($sql); } }
gc回收器调用次数改写
ini_set('session.gc_probability', '1'); ini_set('session.gc_divisor', '3'); //session.gc_divisor 与 session.gc_probability 合起来定义了在每个会话初始化时启动 gc(garbage collection 垃圾回收)进程的概率。此概率用 gc_probability/gc_divisor 计算得来。例如 1/100 意味着在每个请求中有 1% 的概率启动 gc 进程。session.gc_divisor 默认为 100。
相关文章推荐
- PHP(六)函数
- 本地环境 XAMPP+phpStorm+XDebug+chrome 配置和断点调试
- php 异步研究
- php 日期函数
- Zend Studio 12.5.1破解补丁和注册码
- 压力测试tps性能下降问题解决方案
- ThinkPHP清除缓存--一键删除RUNTIME文件夹
- Excel表头转html表头(PHP版本)
- windows 2008 r2 下面搭建 iis+sql server +php5.6 环境遇见的一些问题记录一下
- 【PHP入门篇】1.echo & 注释--慕课网【学习总结】
- php 抓取中国统计局 最新县及县以上行政区划代码
- php正则获取网页标题、关键字、网页描述代码
- IIS FTP的坑
- php common errors
- php中文字符串截取
- WordPress中转义HTML与过滤链接的相关PHP函数使用解析
- PHP学习练手(四)
- 开通sftp功能,但禁用ssh登录的方法
- php地址引用
- WordPress主题中添加文章列表页页码导航的PHP代码实例