利用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 验证码实例代码
Jun 01 PHP
深入php之规范编程命名小结
May 15 PHP
hadoop常见错误以及处理方法详解
Jun 19 PHP
浅析php与数据库代码开发规范
Aug 08 PHP
PHP 利用Mail_MimeDecode类提取邮件信息示例
Jan 26 PHP
浅析php中json_encode()和json_decode()
May 25 PHP
PHP获取MySql新增记录ID值的3种方法
Jun 24 PHP
PHP学习笔记之php文件操作
Jun 03 PHP
PHP redis实现超迷你全文检索
Mar 04 PHP
php插件Xajax使用方法详解
Aug 31 PHP
Laravel 5.5官方推荐的Nginx配置学习教程
Oct 06 PHP
goto语法在PHP中的使用教程
Sep 17 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的安全策略
2006/10/09 PHP
PHP新手上路(三)
2006/10/09 PHP
神盾加密解密教程(三)PHP 神盾解密工具
2014/06/08 PHP
四种php中webservice实现的简单架构方法及实例
2015/02/03 PHP
CodeIgniter配置之routes.php用法实例分析
2016/01/19 PHP
Windows Server 2008 R2和2012中PHP连接MySQL过慢的解决方法
2016/07/02 PHP
JQuery中form验证出错信息的查看方法
2013/10/08 Javascript
浅析JavaScript动画模拟拖拽原理
2016/12/09 Javascript
简单的jQuery拖拽排序效果的实现(增强动态)
2017/02/09 Javascript
angularjs 获取默认选中的单选按钮的value方法
2018/02/28 Javascript
vuex操作state对象的实例代码
2018/04/25 Javascript
对angularJs中$sce服务安全显示html文本的实例
2018/09/30 Javascript
vue2.0+vue-router构建一个简单的列表页的示例代码
2019/02/13 Javascript
使用Vue父子组件通信实现todolist的功能示例代码
2019/04/11 Javascript
Layui事件监听的实现(表单和数据表格)
2019/10/17 Javascript
jquery轻量级数字动画插件countUp.js使用详解
2019/10/17 jQuery
pycharm 使用心得(七)一些实用功能介绍
2014/06/06 Python
python中self原理实例分析
2015/04/30 Python
Python Requests模拟登录实现图书馆座位自动预约
2018/04/27 Python
Django之提交表单与前后端交互的方法
2019/07/19 Python
美国高档百货Nordstrom的折扣店:Nordstrom Rack
2017/11/13 全球购物
Haglöfs瑞典官方网站:haglofs火柴棍,欧洲顶级户外品牌
2018/10/18 全球购物
Wiggle澳大利亚:自行车、跑步、游泳商店
2020/11/07 全球购物
Weblogic的布署方式
2013/08/23 面试题
商场中秋节广播稿
2014/01/17 职场文书
工程技术员岗位职责
2014/03/02 职场文书
勤俭节约演讲稿
2014/05/08 职场文书
学校节能减排方案
2014/06/13 职场文书
送温暖献爱心活动总结
2014/07/08 职场文书
小学生教师节演讲稿
2014/09/03 职场文书
四风剖析查摆对照检查材料思想汇报
2014/09/24 职场文书
2014年村党支部工作总结
2014/12/04 职场文书
2015年乡镇信访工作总结
2015/04/07 职场文书
幼儿园保育员随笔
2015/08/14 职场文书
mybatis3中@SelectProvider传递参数方式
2021/08/04 Java/Android
CSS实现背景图片全屏铺满自适应的3种方式
2022/07/07 HTML / CSS