利用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 Memcached + APC + 文件缓存封装实现代码
Mar 11 PHP
php is_file 判断给定文件名是否为一个正常的文件
May 10 PHP
php操作SVN版本服务器类代码
Nov 27 PHP
深入PHP数据缓存的使用说明
May 10 PHP
php输出echo、print、print_r、printf、sprintf、var_dump的区别比较
Jun 21 PHP
PHP在线打包下载功能示例
Oct 15 PHP
php封装的page分页类完整实例
Oct 18 PHP
php封装的图片(缩略图)处理类完整实例
Oct 19 PHP
php断点续传之文件分割合并详解
Dec 13 PHP
如何修改Laravel中url()函数生成URL的根地址
Aug 11 PHP
PHP实现使用DOM将XML数据存入数组的方法示例
Sep 27 PHP
PHP观察者模式示例【Laravel框架中有用到】
Jun 15 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错误和异长常处理总结
2014/03/06 PHP
php利用curl抓取新浪微博内容示例
2014/04/27 PHP
微信支付开发动态链接Native支付
2016/07/12 PHP
php 访问oracle 存储过程实例详解
2017/01/08 PHP
PHP/HTML混写的四种方式总结
2017/02/27 PHP
微信小程序发送订阅消息的方法(php 为例)
2019/10/30 PHP
ASP小贴士/ASP Tips javascript tips可以当桌面
2009/12/10 Javascript
myEvent.js javascript跨浏览器事件框架
2011/10/24 Javascript
Javascript表格翻页效果实现思路及代码
2013/08/23 Javascript
jquery validate添加自定义验证规则(验证邮箱 邮政编码)
2013/12/04 Javascript
JavaScript实现穷举排列(permutation)算法谜题解答
2014/12/29 Javascript
jQuery DOM删除节点操作指南
2015/03/03 Javascript
jQuery实用技巧必备(上)
2015/11/02 Javascript
JavaScript 弹出子窗体并返回结果到父窗体的实现代码
2016/05/28 Javascript
vue.js自定义组件directives的实例代码
2018/11/09 Javascript
详解Ant Design of React的安装和使用方法
2018/12/27 Javascript
Node.js实现一个HTTP服务器的方法示例
2019/05/13 Javascript
微信小程序如何获取用户头像和昵称
2019/09/23 Javascript
实例分析javascript中的异步
2020/06/02 Javascript
浅谈Vue 自动化部署打包上线
2020/06/14 Javascript
JavaScript事件循环及宏任务微任务原理解析
2020/09/02 Javascript
详细分析JavaScript中的深浅拷贝
2020/09/17 Javascript
Vue通过阿里云oss的url连接直接下载文件并修改文件名的方法
2020/12/25 Vue.js
[01:10:02]IG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
详解Django解决ajax跨域访问问题
2018/08/24 Python
python 使用poster模块进行http方式的文件传输到服务器的方法
2019/01/15 Python
pycharm快捷键汇总
2020/02/14 Python
TensorFlow keras卷积神经网络 添加L2正则化方式
2020/05/22 Python
全方位了解CSS3的Regions扩展
2015/08/07 HTML / CSS
加拿大时尚少女服装品牌:Garage
2016/10/10 全球购物
印尼披萨外送专家:Domino’s Pizza印尼
2017/12/28 全球购物
J2EE包括哪些技术
2016/11/25 面试题
大学同学会活动方案
2014/08/20 职场文书
幼师中班个人总结
2015/02/12 职场文书
推荐六本经典文学奖书籍:此生必读
2019/08/22 职场文书
vue如何清除浏览器历史栈
2022/05/25 Vue.js