PHP
发布时间:2019-11-17 发布网站:大佬教程 code.js-code.com
大佬教程收集整理的这篇文章主要介绍了利用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作为键,把这个键值对保存到 @H_871_1@memcached里面
<div class="codetitle"><a style="cursOR: pointer" data="49702" class="copybut" id="copybut49702" onclick="doCopy('code49702')"> 代码如下:
<div class="codebody" id="code49702">
<?
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 = 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; @H_871_1
@memcache_set($_sessionmem,$_SESSION,$_SESSION_EXPIR
E); @H_871_1
@memcache_close($_sessionmem
); }
?>