利用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设计模式 Command(命令模式)
Jun 26 PHP
PHP中如何判断AJAX提交的数据
Feb 05 PHP
浅析PHP原理之变量分离/引用(Variables Separation)
Aug 09 PHP
php实现根据字符串生成对应数组的方法
Sep 22 PHP
php中adodbzip类实例
Dec 08 PHP
大家都应该掌握的PHP关联数组使用技巧
Dec 25 PHP
PHP开发中常用的十个代码样例
Feb 02 PHP
浅析php-fpm静态和动态执行方式的比较
Nov 09 PHP
php-beanstalkd消息队列类实例分享
Jul 19 PHP
PHP中检查isset()和!empty()函数的必要性
Feb 13 PHP
laravel5.1框架model类查询的实现方法
Oct 08 PHP
PHP中isset、empty的用法与区别示例详解
Nov 05 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提示undefined index的几种解决方法
2012/05/21 PHP
php常用Output和ptions/Info函数集介绍
2013/06/19 PHP
PHP创建PowerPoint2007文档的方法
2015/12/10 PHP
php简单实现单态设计模式的方法分析
2017/07/28 PHP
php使用curl伪造来源ip和refer的方法示例
2018/05/08 PHP
PHP基于mcript扩展实现对称加密功能示例
2019/02/21 PHP
PHP7 参数处理机制修改
2021/03/09 PHP
再谈querySelector和querySelectorAll的区别与联系
2012/04/20 Javascript
轻松创建nodejs服务器(6):作出响应
2014/12/18 NodeJs
javascript实现删除前弹出确认框
2015/06/04 Javascript
jQuery实现的进度条效果
2015/07/15 Javascript
jQuery在header中设置请求信息的方法
2017/03/06 Javascript
vue双向绑定简要分析
2017/03/23 Javascript
socket.io与pm2(cluster)集群搭配的解决方案
2017/06/02 Javascript
layui下拉列表select实现可输入查找的方法
2019/09/28 Javascript
在vue中阻止浏览器后退的实例
2019/11/06 Javascript
nuxt 每个页面head标签内容设置方式
2020/11/05 Javascript
以911新闻为例演示Python实现数据可视化的教程
2015/04/23 Python
Django中使用group_by的方法
2015/05/26 Python
设计模式中的原型模式在Python程序中的应用示例
2016/03/02 Python
python爬虫_微信公众号推送信息爬取的实例
2017/10/23 Python
python交互式图形编程实例(三)
2017/11/17 Python
Python Numpy库datetime类型的处理详解
2019/07/13 Python
pycharm配置git(图文教程)
2019/08/16 Python
PyCharm 2019.3发布增加了新功能一览
2019/12/08 Python
Python 读取 YUV(NV12) 视频文件实例
2019/12/09 Python
python带参数打包exe及调用方式
2019/12/21 Python
快速查找Python安装路径方法
2020/02/06 Python
python数字类型math库原理解析
2020/03/02 Python
input元素的url类型和email类型简介
2012/07/11 HTML / CSS
美国领先的商务贺卡出版商:The Gallery Collection
2018/02/13 全球购物
机械设计及其自动化专业推荐信
2013/10/31 职场文书
行政人事主管岗位职责
2015/04/11 职场文书
小学班主任培训心得体会
2016/01/07 职场文书
ROS系统将python包编译为可执行文件的简单步骤
2021/07/25 Python
Python中itertools库的四个函数介绍
2022/04/06 Python