利用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 相关文章推荐
Windows下的PHP5.0详解
Nov 18 PHP
PHP+Tidy-完美的XHTML纠错+过滤
Apr 10 PHP
黑夜路人出的几道php笔试题
Aug 04 PHP
php设计模式 State (状态模式)
Jun 26 PHP
php实现统计邮件大小的方法
Aug 06 PHP
PHP扩展模块Pecl、Pear以及Perl的区别
Apr 09 PHP
Codeigniter通过SimpleXML将xml转换成对象的方法
Mar 19 PHP
PHP实现获取某个月份周次信息的方法
Aug 11 PHP
php简单解析mysqli查询结果的方法(2种方法)
Jun 29 PHP
Yii2.0中的COOKIE和SESSION用法
Aug 12 PHP
php魔术方法功能与用法实例分析
Oct 19 PHP
PHP树形结构tree类用法示例
Feb 01 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 Hash函数,增强密码安全
2011/02/25 PHP
php求正负数数组中连续元素最大值示例
2014/04/11 PHP
php 类中的常量、静态属性、非静态属性的区别
2017/04/09 PHP
关于Aptana Studio生成自动备份文件的解决办法
2009/12/23 Javascript
用JavaScript玩转游戏物理(一)运动学模拟与粒子系统
2010/06/19 Javascript
javascript学习笔记(十) js对象 继承
2012/06/19 Javascript
javascript动态加载三
2012/08/22 Javascript
动态添加删除表格行的js实现代码
2014/02/28 Javascript
jquery 操作两个select实现值之间的互相传递
2014/03/07 Javascript
jQuery搜索同辈元素方法
2015/02/10 Javascript
JavaScript中的条件判断语句使用详解
2015/06/03 Javascript
学习使用bootstrap基本控件(table、form、button)
2016/04/12 Javascript
jQuery实现导航回弹效果
2017/02/27 Javascript
解决在Bootstrap模糊框中使用WebUploader的问题
2018/03/22 Javascript
微信小程序实现列表页的点赞和取消点赞功能
2018/11/02 Javascript
js new Date()实例测试
2019/10/31 Javascript
Vue 使用Props属性实现父子组件的动态传值详解
2019/11/13 Javascript
vue 中url 链接左边的小图标更改问题
2019/12/30 Javascript
JS实现吸顶特效
2020/01/08 Javascript
ssm+vue前后端分离框架整合实现(附源码)
2020/07/08 Javascript
python使用Matplotlib画条形图
2020/03/25 Python
Python 实现「食行生鲜」签到领积分功能
2018/09/26 Python
python实现根据指定字符截取对应的行的内容方法
2018/10/23 Python
解决pandas .to_excel不覆盖已有sheet的问题
2018/12/10 Python
python中partial()基础用法说明
2018/12/30 Python
python实现图片九宫格分割
2021/03/07 Python
代码总结Python2 和 Python3 字符串的区别
2020/01/28 Python
Keras Convolution1D与Convolution2D区别说明
2020/05/22 Python
Python-split()函数实例用法讲解
2020/12/18 Python
学生个人求职自荐信格式
2013/09/23 职场文书
2014年宣传部工作总结
2014/11/12 职场文书
财务工作个人总结
2015/02/27 职场文书
观后感格式
2015/06/19 职场文书
宾馆安全管理制度
2015/08/06 职场文书
python tkinter实现定时关机
2021/04/21 Python
德劲DE1107指针试高灵敏度全波段收音机机评
2022/04/05 无线电