利用Memcached在php下实现session机制 替换PHP的原生session支持

2015-01-24信息快讯网

利用Memcached在php下实现session机制,替换PHP的原生session支持

方法文件
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函数 serialize()和unserialize()
PHP中创建空文件的代码[file_put_contents vs touch]
php中可能用来加密字符串的函数[base64_encode、urlencode、sha1]
PHP警告Cannot use a scalar value as an array的解决方法
Trying to clone an uncloneable object of class Imagic的解决方法
Uncaught exception com_exception with message Failed to create COM object
比file_get_contents稳定的curl_get_contents分享
php中使用parse_url()对网址进行解析的实现代码(parse_url详解)
php读取mysql乱码,用set names XXX解决的原理分享
php操作JSON格式数据的实现代码
Session保存到数据库的php类分享
php正则表达式(regar expression)
PHP session会话的安全性分析
php数据结构 算法(PHP描述) 简单选择排序 simple selection sort
php中设置多级目录session的问题
从手册去理解分析PHP session机制
session在PHP大型web应用中的使用
使用VisualStudio开发php的图文设置方法
ThinkPHP中实例Model方法的区别说明
php下关于Cannot use a scalar value as an array的解决办法
ionCube 一款类似zend的PHP加密/解密工具
由php的call_user_func传reference引发的思考
PHP连接SQLServer2005 的问题解决方法
php 无限级数据JSON格式及JS解析
php set_magic_quotes_runtime() 函数过时解决方法
php $_SERVER["REQUEST_URI"]获取值的通用解决方法
PHP XML error parsing SOAP payload on line 1
PHP中json_encode、json_decode与serialize、unserialize的性能测试分析
IIS下PHP连接数据库提示mysql undefined function mysql_connect()
Joomla下利用configuration.php存储简单数据
Fatal error: Call to undefined function curl_init()解决方法
php session和cookie使用说明
PHP用mysql数据库存储session的代码
关于PHP5 Session生命周期介绍
php session_start()关于Cannot send session cache limiter - headers already sent错误解决方法
PHP Session变量不能传送到下一页的解决方法
©2014-2024 dbsqp.com