利用Memcached在php下实现session机制 替换PHP的原生session支持


Posted in PHP onAugust 21, 2010

方法文件
session实现文件:memcachedsession.php
实现原理(也是PHP内部session的实现原理):
1.先判断客户端有没有sessionid,
a.没有就添加一个sessionid给客户端,通常是32位hash码,同时初始化一个数组做session容器
b.如果客户端有sessionid,则利用这个sessionid去memcached里面查数据。
2.用户在页面执行过程中可以自行修改session容器里的session值
3.页面最后会把用户的session容器作为值,以用户的sessionid作为键,把这个键值对保存到
memcached里面

<?php 
//memcached服务器连接地址 
$_MEMCACHEAUTH = array( 
'host' => 'localhost' 
, 'port' => 11211 
); 
/* 
获取一些初始化设置值 
*/ 
$_SESSION_NAME = ini_get("session.name"); //sessionid的名称 
$_SESSION_TIME = ini_get("session.cookie_lifetime"); //sessionid这个cookie的最大保存时间 
$_SESSION_EXPIRE = ini_get("session.gc_maxlifetime"); //session键值对在memcached里面的过期时间 
$_SESSION_MEMKEY = ""; //sessionid值 
/* 
自定义的_session_start()方法,替换PHP的原生session_start()方法 
逻辑应该是比较清楚的 
*/ 
function _session_start() 
{ 
global $_SESSION_NAME, $_SESSION_TIME, $_SESSION_MEMKEY; 
global $_SESSION; 
global $_MEMCACHEAUTH, $_sessionmem; 
$_sessionmem = memcache_connect($_MEMCACHEAUTH['host'], $_MEMCACHEAUTH['port']); 
if ( empty($_COOKIE[$_SESSION_NAME]) ) 
{ 
$_SESSION_MEMKEY = md5( uniqid() ); 
setcookie($_SESSION_NAME, $_SESSION_MEMKEY , $_SESSION_TIME, "/"); 
$_SESSION = array(); 
} 
else 
{ 
$_SESSION_MEMKEY = $_COOKIE[$_SESSION_NAME]; 
$_SESSION = memcache_get($_sessionmem, $_SESSION_MEMKEY ); 
if ( $_SESSION === FALSE ) 
{ 
$_SESSION = array(); 
} 
} 
//注册一个handler,这个函数会在页面执行完的时候执行 
register_shutdown_function("_session_save_handler"); 
} 
/* 
页面最后执行的方法,用于保存session值,以及关闭memcached连接 
*/ 
function _session_save_handler() 
{ 
global $_sessionmem; 
global $_SESSION, $_SESSION_NAME, $_SESSION_EXPIRE, $_SESSION_MEMKEY; 
memcache_set($_sessionmem, $_SESSION_MEMKEY, $_SESSION, 0, $_SESSION_EXPIRE); 
memcache_close($_sessionmem); 
} 
?>

测试文件:
设置session值
<?php 
/* 
设置session值文件:session_set.php 
*/ 
include_once "memcachedsession.php"; 
_session_start(); 
$_SESSION['a'] = time(); 
?>

获取session值
<?php 
/* 
获取session值文件:session_get.php 
*/ 
include_once "memcachedsession.php"; 
_session_start(); 
function getsession() 
{ 
echo $_SESSION['a']; 
} 
getsession(); 
?>

Memcached的缓冲应用还是非常不错滴,呵呵,,,
转载:jincon's 包 blog http://www.yi1.com.cn
PHP 相关文章推荐
用PHP连接Oracle数据库
Oct 09 PHP
修改Zend引擎实现PHP源码加密的原理及实践
Apr 14 PHP
PHP实现下载功能的代码
Sep 29 PHP
2个Codeigniter文件批量上传控制器写法例子
Jul 25 PHP
PHP中使用数组指针函数操作数组示例
Nov 19 PHP
PHP间隔一段时间执行代码的方法
Dec 02 PHP
PHP输出日历表代码实例
Mar 27 PHP
值得分享的php+ajax实时聊天室
Jul 20 PHP
PHP简单读取PDF页数的实现方法
Jul 21 PHP
PHP使用HTML5 FormData对象提交表单操作示例
Jul 02 PHP
php利用ZipArchive类操作文件的实例
Jan 21 PHP
PHP基于array_unique实现二维数组去重
Jul 14 PHP
ThinkPHP中实例Model方法的区别说明
Aug 21 #PHP
PHP 数组基础知识小结
Aug 20 #PHP
一个简单php扩展介绍与开发教程
Aug 19 #PHP
php checkbox 取值详细说明
Aug 19 #PHP
PHP 截取字符串专题集合
Aug 19 #PHP
php 过滤器实现代码
Aug 09 #PHP
PHP对字符串的递增运算分析
Aug 08 #PHP
You might like
php利用header函数实现文件下载时直接提示保存
2009/11/12 PHP
发款php蜘蛛统计插件只要有mysql就可用
2010/10/12 PHP
php判断上传的Excel文件中是否有图片及PHPExcel库认识
2013/01/11 PHP
浅析php中array_map和array_walk的使用对比
2016/11/20 PHP
实现超用户体验 table排序javascript实现代码
2009/06/22 Javascript
Extjs中ComboBox加载并赋初值的实现方法
2012/03/22 Javascript
Javascript无阻塞加载具体方式
2013/06/28 Javascript
jQuery Easyui学习之datagrid 动态添加、移除editor
2016/01/27 Javascript
jQuery事件委托之Safari
2016/07/05 Javascript
JS实现的手机端精简幻灯片效果
2016/09/05 Javascript
BootStrap中
2016/12/10 Javascript
vue watch监听对象及对应值的变化详解
2018/02/24 Javascript
Postman模拟发送带token的请求方法
2018/03/31 Javascript
Django+vue跨域问题解决的详细步骤
2019/01/20 Javascript
基于Webpack4和React hooks搭建项目的方法
2019/02/05 Javascript
Vue源码学习之关于对Array的数据侦听实现
2019/04/23 Javascript
使用JavaScript计算前一天和后一天的思路详解
2019/12/20 Javascript
js绘制一条直线并旋转45度
2020/08/21 Javascript
VUE中setTimeout和setInterval自动销毁案例
2020/09/07 Javascript
一些Python中的二维数组的操作方法
2015/05/02 Python
在Linux系统上通过uWSGI配置Nginx+Python环境的教程
2015/12/25 Python
python简单读取大文件的方法
2016/07/01 Python
python 获取当天凌晨零点的时间戳方法
2018/05/22 Python
python ipset管理 增删白名单的方法
2019/01/14 Python
python3去掉string中的标点符号方法
2019/01/22 Python
python 数据提取及拆分的实现代码
2019/08/26 Python
python爬虫 线程池创建并获取文件代码实例
2019/09/28 Python
基于YUV 数据格式详解及python实现方式
2019/12/09 Python
python中的itertools的使用详解
2020/01/13 Python
Python在后台自动解压各种压缩文件的实现方法
2020/11/10 Python
美国特价机票专家:Airfarewatchdog
2018/01/24 全球购物
银行职业规划书范文
2013/12/28 职场文书
腾讯广告词
2014/03/19 职场文书
爱国口号
2014/06/19 职场文书
优秀班组申报材料
2014/12/25 职场文书
MySQL查看表和清空表的常用命令总结
2021/05/26 MySQL