利用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 配置文件中open_basedir选项作用
Jul 19 PHP
利用php+mysql来做一个功能强大的在线计算器
Oct 12 PHP
php smarty截取中文字符乱码问题?gb2312/utf-8
Nov 07 PHP
php 对输入信息的进行安全过滤的函数代码
Jun 29 PHP
10 个经典PHP函数
Oct 17 PHP
php curl post 时出现的问题解决
Jan 30 PHP
Yii2实现中国省市区三级联动实例
Feb 08 PHP
PHP解决中文乱码
Apr 28 PHP
自写的利用PDO对mysql数据库增删改查操作类
Feb 19 PHP
Laravel中正确地返回HTTP状态码方法示例
Sep 10 PHP
yii框架数据库关联查询操作示例
Oct 14 PHP
PHP日期和时间函数的使用示例详解
Aug 06 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 批量删除数据的方法分析
2009/10/30 PHP
解析PHP中常见的mongodb查询操作
2013/06/20 PHP
PHP数组排序函数合集 以及它们之间的联系分析
2013/06/27 PHP
高性能PHP框架Symfony2经典入门教程
2014/07/08 PHP
php同时使用session和cookie来保存用户登录信息的实现代码
2016/05/13 PHP
利用Homestead快速运行一个Laravel项目的方法详解
2017/11/14 PHP
PHP实现一个轻量级容器的方法
2019/01/28 PHP
php定期拉取数据对比方法实例
2019/09/22 PHP
关于B/S判断浏览器断开的问题讨论
2008/10/29 Javascript
jquery select操作的日期联动实现代码
2009/12/06 Javascript
jquery实现图片随机排列的方法
2015/05/04 Javascript
关于JSON.parse(),JSON.stringify(),jQuery.parseJSON()的用法
2016/06/30 Javascript
Bootstrapvalidator校验、校验清除重置的实现代码(推荐)
2016/09/28 Javascript
js仿手机页面文件下拉刷新效果
2016/10/14 Javascript
使用vue-router为每个路由配置各自的title
2018/07/30 Javascript
zepto.js 实时监听输入框的方法
2018/12/04 Javascript
vue 使用 v-model 双向绑定父子组件的值遇见的问题及解决方案
2021/03/01 Vue.js
Python爬虫模拟登录带验证码网站
2016/01/22 Python
Python使用asyncio包处理并发详解
2017/09/09 Python
python numpy 一维数组转变为多维数组的实例
2018/07/02 Python
python实现AES加密与解密
2019/03/28 Python
python3实现小球转动抽奖小游戏
2020/04/15 Python
python实现机器人卡牌
2019/10/06 Python
Python实现播放和录制声音的功能
2020/08/12 Python
浅谈Python __init__.py的作用
2020/10/28 Python
意大利在线购买隐形眼镜网站:VisionDirect.it
2019/03/18 全球购物
优秀学生自我鉴定范例
2013/12/18 职场文书
运动会邀请函范文
2014/01/31 职场文书
一年级语文教学反思
2014/02/13 职场文书
优秀护士获奖感言
2014/02/20 职场文书
爱护草坪标语
2014/06/24 职场文书
乡镇爱国卫生月活动总结
2014/06/25 职场文书
医生党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
交通事故一次性赔偿协议书范本
2014/11/02 职场文书
Python基础之教你怎么在M1系统上使用pandas
2021/05/08 Python
Windows11里微软已经将驱动程序安装位置A盘删除
2021/11/21 数码科技