服务器之家

服务器之家 > 正文

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

时间:2019-11-07 12:29     来源/作者:jincon's 包 blog

方法文件 
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

标签:

相关文章

热门资讯

玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分
玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分 2019-06-21
男生常说24816是什么意思?女生说13579是什么意思?
男生常说24816是什么意思?女生说13579是什么意思? 2019-09-17
华为nova5pro和p30pro哪个好 华为nova5pro和华为p30pro对比详情
华为nova5pro和p30pro哪个好 华为nova5pro和华为p30pro对比详情 2019-06-22
Nginx服务器究竟是怎么执行PHP项目
Nginx服务器究竟是怎么执行PHP项目 2019-05-24
配置IIS网站web服务器的安全策略配置解决方案
配置IIS网站web服务器的安全策略配置解决方案 2019-05-23
返回顶部