session改写mysql

在调用 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改写session到数据库的更多相关文章

  1. session 存入数据库 php

     session 机制 1.php中session的生成机制 session是保存在服务器的,当我们在代码中调用session_start();时,PHP会同时往SESSION的存放目录(默认为/tm ...

  2. 将Session写入数据库

    使用session_set_save_handler()函数,将Session的内容写入数据库 <?php /* *@author Fahy *@link http://home.cnblogs ...

  3. Asp.Net进程外Session(状态服务器Session、数据库Session)

    介绍 我们知道,当浏览器关闭,或者网站重启的时候,会话就结束了.即Seesion就丢失了.(当Web.config配置文件改动,哪怕什么内容都不加,仅仅往配置文件中加一个空格都是改we.config变 ...

  4. PHP session 写入数据库中的方法

    首先解释下为什么要把session 写到数据库中呢,session 一般默认是以文件的形式放在php.ini 配置的目录中的, 如果你的网站实现了多台服务器负载均衡,这样用户访问你的网站,可能进入的服 ...

  5. session放数据库里解决丢失的问题

    在编程里是会话的意思Session 对象存储特定用户会话所需的信息.这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去. ...

  6. php面试题12(多态web服务器共享session的方法:将session存到数据库)($val=&$data[$key];)

    php面试题12(多态web服务器共享session的方法:将session存到数据库)($val=&$data[$key];) 一.总结 1.多态web服务器共享session的方法: ...

  7. python-Web-django-商城-session存入数据库

    utils: '''用户session''' import datetime from app01.models import Sessions ''' iii = request.session.s ...

  8. jetty+mongodb 配置session外部数据库存储

    monbgodb简介 主页 http://www.mongodb.org/ oschina.net 介绍页 http://www.oschina.net/p/mongodb MongoDB是一个介于关 ...

  9. 将session存入数据库,memcache的方法

    //存入数据库 <?phpif(!$con = mysql_connect('localhost','root','123456')){    die('连接数据库失败');}$link = m ...

随机推荐

  1. PHP之路——VC库

    VC库:https://pan.baidu.com/s/1dF9LslV    密码:v7ap

  2. CentOS 6用snmp配合MRTG显示系统状态

    1. 软件安装以yum的方式安装snmp/MRTG 安装SNMP(要记得安装net-snmp-utils,不然snmpwalk将不能使用)yum -y install net-snmp* 安装MRTG ...

  3. 转载——web前端相关资源总结

    前端牛人博客:张克军.阮一峰.拔赤(李晶).拔赤(李晶)2.张鑫旭.梦想天空.阿当.泽飞.刘杰(嗷嗷).为之漫笔(李松峰).goddyzhao.hax的技术部落.周爱民.随网之舞.子鼠.司徒正美.ju ...

  4. HID燈是什么及其工作原理

    HID為HighIntensityDischarge的縮寫,即高壓氣體放電燈,它發光的原理是將12V電壓增壓至23000V的超高電壓,激穿填充在石英管的氙氣,使它發光.然后再將電壓轉成85V左右,穩定 ...

  5. 第一个Windows程序讲解

    上次,我们一起写了第一个Windows程序,虽然程序非常简单,但是它却可以帮助大家建立学好windows开发的信心. 今天,就让我帮助大家分析一下这个程序的内容.首先,我们的程序包含了一个头文件:wi ...

  6. Emacs添加主题插件(Win系统)

    Emacs添加主题插件(Win系统) */--> /* @licstart The following is the entire license notice for the JavaScri ...

  7. AWK中几个变量

    学习AWK语言 https://awk.readthedocs.org/en/latest/chapter-one.html http://www.ibm.com/developerworks/cn/ ...

  8. Linux下aMule安装教程

    Linux下载神器aMule安装教程 aMule可以说是Linux下的电驴,你们说eMule是不是就是aMule的Windows版呢?也是开源的. Fedora安装aMule很简单,两条命令就搞定. ...

  9. Hibernate 关于load和get方法区别

    load和个体方法都可以充分利用内部缓存和二级缓存中的现有数据. ******************************************************************* ...

  10. SpringMVC整合fastjson-1.1.41

    以前用fastjson也只是硬编码,就好像这篇博文写的http://blog.csdn.net/jadyer/article/details/24395015 昨天心血来潮突然想和SpringMVC整 ...