利用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处理斐波那契数列非递归方法
Feb 04 PHP
php变量范围介绍
Oct 15 PHP
destoon实现资讯信息前面调用它所属分类的方法
Jul 15 PHP
php出现内存位置访问无效错误问题解决方法
Aug 16 PHP
PHP实现获取某个月份周次信息的方法
Aug 11 PHP
php结合md5实现的加密解密方法
Jan 25 PHP
Laravel中的Auth模块详解
Aug 17 PHP
在云虚拟主机部署thinkphp5项目的步骤详解
Dec 21 PHP
CMSPRESS 10行代码搞定 PHP无限级分类2
Mar 30 PHP
CodeIgniter框架钩子机制实现方法【hooks类】
Aug 21 PHP
php微信公众号开发之秒杀
Oct 20 PHP
php使用mysqli和pdo扩展,测试对比mysql数据库的执行效率完整示例
May 09 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中的unset究竟会不会释放内存
2013/07/18 PHP
js和php邮箱地址验证的实现方法
2014/01/09 PHP
CI框架中site_url()和base_url()的区别
2015/01/07 PHP
PHP自带方法验证邮箱是否存在
2016/02/01 PHP
PHP实现仿百度文库,豆丁在线文档效果(word,excel,ppt转flash)
2016/03/10 PHP
PHP高精确度运算BC函数库实例详解
2017/08/15 PHP
用jscript实现新建word文档
2007/06/15 Javascript
node.js实现多图片上传实例
2014/06/03 Javascript
js获取元素相对窗口位置的实现代码
2014/09/28 Javascript
javascript实现动态导入js与css等静态资源文件的方法
2015/07/25 Javascript
详解JavaScript的Date对象(制作简易钟表)
2020/04/07 Javascript
微信小程序  modal详解及实例代码
2016/11/09 Javascript
原生js实现简单的Ripple按钮实例代码
2017/03/24 Javascript
jQuery EasyUI 为Combo,Combobox添加清除值功能的实例
2017/04/13 jQuery
Angular实现的简单定时器功能示例
2017/12/28 Javascript
vue.js移动数组位置,同时更新视图的方法
2018/03/08 Javascript
clipboard在vue中的使用的方法示例
2018/10/19 Javascript
js实现鼠标拖拽缩放div实例代码
2019/03/25 Javascript
详解微信小程序开发(项目从零开始)
2019/06/06 Javascript
微信小程序实现电子签名并导出图片
2020/05/27 Javascript
详解Vue.js3.0 组件是如何渲染为DOM的
2020/11/10 Javascript
python任务调度实例分析
2015/05/19 Python
Pycharm学习教程(1) 定制外观
2017/05/02 Python
python中plot实现即时数据动态显示方法
2018/06/22 Python
Python实现string字符串连接的方法总结【8种方式】
2018/07/06 Python
python 根据网易云歌曲的ID 直接下载歌曲的实例
2019/08/24 Python
解决Django删除migrations文件夹中的文件后出现的异常问题
2019/08/31 Python
HTML5中的websocket实现直播功能
2018/05/21 HTML / CSS
100%有机精油,美容油:House of Pure Essence
2018/10/30 全球购物
Interhome丹麦:在线预订度假屋和公寓
2019/07/18 全球购物
我的求职计划书
2014/01/10 职场文书
30年同学聚会邀请函
2014/01/25 职场文书
会议活动邀请函
2014/01/27 职场文书
工程材料采购方案
2014/05/18 职场文书
通信工程专业求职信
2014/06/04 职场文书
假期安全教育广播稿
2014/10/04 职场文书