利用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往windows中添加用户
Dec 06 PHP
用PHP 快速生成 Flash 动画的方法
Mar 06 PHP
使用GROUP BY的时候如何统计记录条数 COUNT(*) DISTINCT
Apr 23 PHP
PHP获取数组中某元素的位置及array_keys函数应用
Jan 29 PHP
本地机apache配置基于域名的虚拟主机详解
Aug 10 PHP
PHP使用header()输出图片缓存实例
Dec 09 PHP
php进行支付宝开发中return_url和notify_url的区别分析
Dec 22 PHP
PHP代码实现表单数据验证类
Jul 28 PHP
整理php防注入和XSS攻击通用过滤
Sep 13 PHP
php实现Session存储到Redis
Nov 11 PHP
PHP保存session到memcache服务器的方法
Jan 19 PHP
PHP工厂模式的日常使用
Mar 20 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
mac下使用brew配置环境的步骤分享
2011/05/23 PHP
深入解析PHP的引用计数机制
2013/06/14 PHP
php打包压缩文件之ZipArchive方法用法分析
2016/04/30 PHP
ThinkPHP框架实现的邮箱激活功能示例
2018/06/15 PHP
PHP常见的几种攻击方式实例小结
2019/04/29 PHP
js动态添加onload、onresize、onscroll事件(另类方法)
2012/12/26 Javascript
js导出格式化的excel 实例方法
2013/07/17 Javascript
js获取某元素的class里面的css属性值代码
2014/01/16 Javascript
window.returnValue使用方法示例介绍
2014/07/03 Javascript
iframe调用父页面函数示例详解
2014/07/17 Javascript
JavaScript实现Iterator模式实例分析
2015/06/09 Javascript
JS实现的N多简单无缝滚动代码(包含图文效果)
2015/11/06 Javascript
JavaScript的Vue.js库入门学习教程
2016/05/23 Javascript
原生js三级联动的简单实现代码
2016/06/07 Javascript
在Mac OS上安装使用Node.js的项目自动化构建工具Gulp
2016/06/18 Javascript
JavaScript学习小结之使用canvas画“哆啦A梦”时钟
2016/07/24 Javascript
基于AngularJS前端云组件最佳实践
2016/10/20 Javascript
vue.js删除动态绑定的radio的指定项
2017/06/02 Javascript
bootstrap基本配置_动力节点Java学院整理
2017/07/14 Javascript
Vue-Router的使用方法
2018/09/05 Javascript
vue v-for出来的列表,点击某个li使得当前被点击的li字体变红操作
2020/07/17 Javascript
[59:48]LGD vs IG 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python读写配置文件的方法
2015/06/03 Python
PyQt5实现QLineEdit添加clicked信号的方法
2019/06/25 Python
wxpython实现按钮切换界面的方法
2019/11/19 Python
Python中的wordcloud库安装问题及解决方法
2020/05/27 Python
Python fileinput模块如何逐行读取多个文件
2020/10/05 Python
canvas实现按住鼠标移动绘制出轨迹的示例代码
2018/02/05 HTML / CSS
英国在线购买轮胎、预订汽车、汽车维修和装配网站:Protyre
2020/04/12 全球购物
什么叫做SQL注入,如何防止
2016/10/04 面试题
学历公证书范本
2014/04/09 职场文书
个人四风问题整改措施思想汇报
2014/10/04 职场文书
大学生预备党员自我评价
2015/03/04 职场文书
元旦晚会开场白
2015/05/29 职场文书
让生命充满爱观后感
2015/06/08 职场文书
python APScheduler执行定时任务介绍
2022/04/19 Python