利用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 google或baidu分页代码
Nov 26 PHP
php学习笔记 php中面向对象三大特性之一[封装性]的应用
Jun 13 PHP
JS中encodeURIComponent函数用php解码的代码
Mar 01 PHP
php set_time_limit()函数的使用详解
Jun 05 PHP
php读取文件内容的方法汇总
Jan 24 PHP
php文件夹的创建与删除方法
Jan 24 PHP
php计算两个日期相差天数的方法
Mar 14 PHP
php简单实现快速排序的方法
Apr 04 PHP
PHP面向对象之后期静态绑定功能介绍
May 18 PHP
通过PHP简单实例介绍文件上传
Dec 16 PHP
composer.lock文件的作用
Feb 03 PHP
PHP获取ttf格式文件字体名的方法示例
Mar 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
ThinkPHP模板输出display用法分析
2014/11/26 PHP
Mac环境下php操作mysql数据库的方法分享
2015/05/11 PHP
PHP url的pathinfo模式加载不同控制器的简单实现
2016/08/12 PHP
thinkPHP批量删除的实现方法分析
2016/11/09 PHP
Laravel 框架返回状态拦截代码
2019/10/18 PHP
PHP+Mysql分布式事务与解决方案深入理解
2021/02/27 PHP
ExtJS 2.0 实用简明教程之布局概述
2009/04/29 Javascript
js对象关系图 方便dom操作
2012/03/18 Javascript
Js+Flash实现访问剪切板操作
2012/11/20 Javascript
js 金额格式化来回转换示例
2014/02/23 Javascript
Javascript实现Web颜色值转换
2015/02/05 Javascript
jQuery插件zoom实现图片全屏放大弹出层特效
2015/04/15 Javascript
jQuery Validate表单验证插件 添加class属性形式的校验
2016/01/18 Javascript
JavaScript字符集编码与解码详谈
2017/02/02 Javascript
vue-cli+webpack记事本项目创建
2017/04/01 Javascript
JavaScript实现网页头部进度条刷新
2017/04/16 Javascript
详解Windows下安装Nodejs步骤
2017/05/18 NodeJs
使用react-router4.0实现重定向和404功能的方法
2017/08/28 Javascript
关于单文件组件.vue的使用
2018/09/20 Javascript
微信小程序实现原生步骤条
2019/07/25 Javascript
[25:45]2018DOTA2亚洲邀请赛4.5SOLO赛 Sylar vs Paparazi
2018/04/06 DOTA
[01:15]PWL S2开团时刻第二期——他们杀 我就白给
2020/11/25 DOTA
python练习程序批量修改文件名
2014/01/16 Python
python获得文件创建时间和修改时间的方法
2015/06/30 Python
Python初学时购物车程序练习实例(推荐)
2017/08/08 Python
python去掉空白行的多种实现代码
2018/03/19 Python
html5拖曳操作 HTML5实现网页元素的拖放操作
2013/01/02 HTML / CSS
教师评优的个人自我评价分享
2013/09/19 职场文书
绿化先进工作者事迹材料
2014/01/30 职场文书
高一数学教学反思
2014/02/07 职场文书
学校教师安全责任书
2014/07/23 职场文书
安全保证书怎么写
2015/02/28 职场文书
门店店长岗位职责
2015/04/14 职场文书
2015年教师师德师风承诺书
2015/04/28 职场文书
迎国庆主题班会
2015/08/17 职场文书
Python帮你解决手机qq微信内存占用太多问题
2022/02/15 Python