php改写session到数据库
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到数据库的更多相关文章
- session 存入数据库 php
session 机制 1.php中session的生成机制 session是保存在服务器的,当我们在代码中调用session_start();时,PHP会同时往SESSION的存放目录(默认为/tm ...
- 将Session写入数据库
使用session_set_save_handler()函数,将Session的内容写入数据库 <?php /* *@author Fahy *@link http://home.cnblogs ...
- Asp.Net进程外Session(状态服务器Session、数据库Session)
介绍 我们知道,当浏览器关闭,或者网站重启的时候,会话就结束了.即Seesion就丢失了.(当Web.config配置文件改动,哪怕什么内容都不加,仅仅往配置文件中加一个空格都是改we.config变 ...
- PHP session 写入数据库中的方法
首先解释下为什么要把session 写到数据库中呢,session 一般默认是以文件的形式放在php.ini 配置的目录中的, 如果你的网站实现了多台服务器负载均衡,这样用户访问你的网站,可能进入的服 ...
- session放数据库里解决丢失的问题
在编程里是会话的意思Session 对象存储特定用户会话所需的信息.这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去. ...
- php面试题12(多态web服务器共享session的方法:将session存到数据库)($val=&$data[$key];)
php面试题12(多态web服务器共享session的方法:将session存到数据库)($val=&$data[$key];) 一.总结 1.多态web服务器共享session的方法: ...
- python-Web-django-商城-session存入数据库
utils: '''用户session''' import datetime from app01.models import Sessions ''' iii = request.session.s ...
- jetty+mongodb 配置session外部数据库存储
monbgodb简介 主页 http://www.mongodb.org/ oschina.net 介绍页 http://www.oschina.net/p/mongodb MongoDB是一个介于关 ...
- 将session存入数据库,memcache的方法
//存入数据库 <?phpif(!$con = mysql_connect('localhost','root','123456')){ die('连接数据库失败');}$link = m ...
随机推荐
- 学c语言做练习之统计文件中字符的个数
统计文件中字符的个数(采用命令行参数) #include<stdio.h> #include<stdlib.h> int main(int argc, char *argv[] ...
- PHP简单获取数据库查询结果并返回JSON
<?php header("Content-type:text/html;charset=utf-8"); //连接数据库 $con = mysql_connect(&quo ...
- ATR的基本结构与意义(无历史字符部分)
Reset 3B FA 13 00 00 81 31 FE 45 4A 43 4F 50 34 31 56 32 32 31 96 复位应答 ATR TS( The Initial character ...
- -_-#ueditor编辑器chrome浏览器下只能复制最后一行
被过滤掉了
- (2015年郑州轻工业学院ACM校赛题)I 旋转图像
矩阵旋转,写一个转 90° 的函数就行了, 注意每次要将 长和宽的值进行交换就行了. #include<stdio.h> #include<iostream> #include ...
- Java StringTokenizer分割字符串
除了String本身的split方法,JDK在很早就提供了StringTokenizer这个类来分割字符串: 不过,由于正则表达式和String本身的功能越来越多,StringTokenizer已经被 ...
- java笔记8之选择结构IF
注意1 A比较表达式无论简单还是复杂,结果必须是boolean类型 B:if语句控制的语句体如果是一条语句,大括号可以省略: 如果是多条语句,就不能省略.建议永远不要省 ...
- EMV/PBOC 解析(一) 卡片文件结构
刚到公司老大便发我一份文档<智能卡ISO7816-4规范(中文版)>,然后就让我研究下IC智能卡数据读取和支付.身为一直做.NET开发的我对硬件啥的一无所知,各种无头绪啊,研究了两天后,稍 ...
- swift学习资料初探
1. http://code.csdn.net/news/2820075
- VS2010 使用TeeChart画图控件 - 之二 - 绘制图形(折线图,柱状图)
1.前期准备 详细可见VS2010 使用TeeChart画图控件 - 之中的一个 控件和类的导入 1. 1 加入TeeChart控件,给控件加入变量m_TeeChart 加入TeeChart控件,右击 ...