利用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里面
<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;
memcache_set($_sessionmem,$_SESSION,$_SESSION_EXPIRE);
memcache_close($_sessionmem);
}
?>

测试文件
设置session值
<div class="codetitle"><a style="CURSOR: pointer" data="41416" class="copybut" id="copybut41416" onclick="doCopy('code41416')"> 代码如下:
<div class="codebody" id="code41416">
<?PHP
/
设置session值文件:session_set.PHP
/
include_once "memcachedsession.PHP";
_session_start();
$_SESSION['a'] = time();
?>

获取session值
<div class="codetitle"><a style="CURSOR: pointer" data="19389" class="copybut" id="copybut19389" onclick="doCopy('code19389')"> 代码如下:
<div class="codebody" id="code19389">
<?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

Memcachedsessionsession

相关文章

Hessian开源的远程通讯,采用二进制 RPC的协议,基于 HTTP 传输。可以实现PHP调用Java,Python,C#等多语...
初识Mongodb的一些总结,在Mac Os X下真实搭建mongodb环境,以及分享个Mongodb管理工具,学习期间一些总结...
边看边操作,这样才能记得牢,实践是检验真理的唯一标准.光看不练假把式,光练不看傻把式,边看边练真把式....
在php中,结果输出一共有两种方式:echo和print,下面将对两种方式做一个比较。 echo与print的区别: (...
在安装好wampServer后,一直没有使用phpMyAdmin,今天用了一下,phpMyAdmin显示错误:The mbstring exte...
变量是用于存储数据的容器,与代数相似,可以给变量赋予某个确定的值(例如:$x=3)或者是赋予其它的变...