利用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 相关文章推荐
如何开发一个虚拟域名系统
Oct 09 PHP
MySQL授权问题总结
May 06 PHP
php Smarty 字符比较代码
Feb 27 PHP
php使HTML标签自动补全闭合函数代码
Oct 04 PHP
PHP漏洞全解(详细介绍)
Nov 13 PHP
手把手教你打印出PDF(关于fpdf的简单应用)
Jun 25 PHP
zend framework文件上传功能实例代码
Dec 25 PHP
php格式化时间戳显示友好的时间实现思路及代码
Oct 23 PHP
php在线解压ZIP文件的方法
Dec 30 PHP
php中return的用法实例分析
Feb 28 PHP
Smarty使用自定义资源的方法
Aug 08 PHP
Laravel学习教程之IOC容器的介绍与用例
Aug 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/08/20 PHP
PHP正则替换函数preg_replace和preg_replace_callback使用总结
2014/09/22 PHP
php+Memcached实现简单留言板功能示例
2017/02/15 PHP
Laravel5.4框架中视图共享数据的方法详解
2019/09/05 PHP
为指定元素增加样式的js代码
2009/12/09 Javascript
基于jQuery的动态表格插件
2011/03/28 Javascript
增强用户体验友好性之jquery easyui window 窗口关闭时的提示
2012/06/22 Javascript
jsPDF生成pdf后在网页展示实例
2014/01/16 Javascript
如何正确使用javascript 来进行我们的程序开发
2014/06/23 Javascript
js生成随机数的过程解析
2015/11/24 Javascript
用JavaScript动态建立或增加CSS样式表的实现方法
2016/05/20 Javascript
JavaScript中实现键值对应的字典与哈希表结构的示例
2016/06/12 Javascript
JavaScript之Date_动力节点Java学院整理
2017/06/28 Javascript
Nodejs中crypto模块的安全知识讲解
2018/01/03 NodeJs
vue解决弹出蒙层滑动穿透问题的方法
2018/09/22 Javascript
基于VUE实现的九宫格抽奖功能
2018/09/30 Javascript
Vue实现Layui的集成方法步骤
2020/04/10 Javascript
JavaScript本地储存:localStorage、sessionStorage、cookie的使用
2020/10/13 Javascript
[09:33]2015国际邀请赛第四日TOP10
2015/08/08 DOTA
[01:30]2016国际邀请赛中国区预选赛神秘商店火爆开启
2016/06/26 DOTA
[02:16]完美世界DOTA2联赛PWL S3 集锦第三期
2020/12/21 DOTA
Python的爬虫程序编写框架Scrapy入门学习教程
2016/07/02 Python
Python 序列的方法总结
2016/10/18 Python
Django 接收Post请求数据,并保存到数据库的实现方法
2019/07/12 Python
PYTHON EVAL的用法及注意事项解析
2019/09/06 Python
Python 操作mysql数据库查询之fetchone(), fetchmany(), fetchall()用法示例
2019/10/17 Python
pyhton中__pycache__文件夹的产生与作用详解
2019/11/24 Python
django3.02模板中的超链接配置实例代码
2020/02/04 Python
Python实现在线批量美颜功能过程解析
2020/06/10 Python
简单了解python关键字global nonlocal区别
2020/09/21 Python
德国运动鞋网上商店:Afew Store
2018/01/05 全球购物
LACOSTE波兰官网:Polo衫、服装和鞋类
2020/09/29 全球购物
大学毕业自我鉴定范文
2014/02/03 职场文书
最常使用的求职信
2014/05/25 职场文书
pytorch 使用半精度模型部署的操作
2021/05/24 Python
微信小程序APP的事件绑定以及传递参数时的冒泡和捕获
2022/04/19 Javascript