利用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 相关文章推荐
DISCUZ 分页代码
Jan 02 PHP
php一句话cmdshell新型 (非一句话木马)
Apr 18 PHP
通过PHP CLI实现简单的数据库实时监控调度
Jul 01 PHP
PHP随机字符串生成代码(包括大小写字母)
Jun 24 PHP
PHP数组排序函数合集 以及它们之间的联系分析
Jun 27 PHP
php处理restful请求的路由类分享
Feb 27 PHP
zf框架的session会话周期及次数限制使用示例
Mar 13 PHP
PHP保存session到memcache服务器的方法
Jan 19 PHP
Symfony2框架学习笔记之HTTP Cache用法详解
Mar 18 PHP
PHP+JavaScript实现无刷新上传图片
Feb 21 PHP
php-app开发接口加密详解
Apr 18 PHP
在laravel中使用with实现动态添加where条件
Oct 10 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延迟静态绑定实例分析
2015/02/08 PHP
PHP检测链接是否存在的代码实例分享
2016/05/06 PHP
PHP之多条件混合筛选功能的实现方法
2019/10/09 PHP
利用js判断浏览器类型(是否为IE,Firefox,Opera浏览器)
2013/11/22 Javascript
web前端设计师们常用的jQuery特效插件汇总
2014/12/07 Javascript
JavaScript实现简单获取当前网页网址的方法
2015/11/09 Javascript
AngularJS数据源的多种获取方式汇总
2016/02/02 Javascript
jQuery插件实现文字无缝向上滚动效果代码
2016/02/25 Javascript
JavaScript的React Web库的理念剖析及基础上手指南
2016/05/10 Javascript
jQuery简单实现点击文本框复制内容到剪贴板上的方法
2016/08/01 Javascript
JS简单实现浮动窗口效果示例
2016/09/07 Javascript
jQuery Checkbox 全选 反选的简单实例
2016/11/29 Javascript
JQuery和HTML5 Canvas实现弹幕效果
2017/01/04 Javascript
JS自动生成动态HTML验证码页面
2017/06/14 Javascript
JavaScript中递归实现的方法及其区别
2017/09/12 Javascript
解决vue-router在同一个路由下切换,取不到变化的路由参数问题
2018/09/01 Javascript
微信小程序下拉框搜索功能的实现方法
2019/07/31 Javascript
微信小程序自定义tabBar在uni-app的适配详解
2019/09/30 Javascript
django上传图片并生成缩略图方法示例
2017/12/11 Python
python 列表输出重复值以及对应的角标方法
2019/06/11 Python
python中的decimal类型转换实例详解
2019/06/26 Python
flask应用部署到服务器的方法
2019/07/12 Python
python3字符串操作总结
2019/07/24 Python
python中pygame安装过程(超级详细)
2019/08/04 Python
Python pickle模块实现对象序列化
2019/11/22 Python
英国领先品牌手动工具和电动工具供应商:Tooled Up
2018/11/24 全球购物
Pretty Green美国:英式摇滚服饰风格代表品牌之一
2019/01/23 全球购物
SQL里面如何插入自动增长序列号字段
2012/03/29 面试题
《悯农》教学反思
2014/04/28 职场文书
安全教育月活动总结
2014/05/05 职场文书
法制演讲稿
2014/09/10 职场文书
2015年转正工作总结范文
2015/04/02 职场文书
党员带头倡议书
2015/04/29 职场文书
2016毕业实习单位评语大全
2015/12/01 职场文书
介绍信应该怎么开?
2019/04/03 职场文书
MySQL中distinct与group by之间的性能进行比较
2021/05/26 MySQL