利用Memcached在php下实现session机制 替换PHP的原生session支持
程序员文章站
2022-06-07 15:31:35
方法文件 session实现文件:memcachedsession.php 实现原理(也是php内部session的实现原理): 1.先判断客户端有没有sessionid,...
方法文件
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
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
上一篇: MySQL索引之B+Tree
下一篇: 床头朝哪个方向好?卧室床头摆放的风水禁忌
推荐阅读
-
利用Memcached在php下实现session机制 替换PHP的原生session支持
-
利用Memcached在php下实现session机制 替换PHP的原生session支持
-
利用Memcached在php下实现session机制 替换PHP的原生session支持_php技巧
-
利用Memcached在php下实现session机制 替换PHP的原生session支持_PHP教程
-
memcache 利用Memcached在php下实现session机制 替换PHP的原生session支持
-
利用Memcached在php下实现session机制 替换PHP的原生session支持_php技巧
-
memcache 利用Memcached在php下实现session机制 替换PHP的原生session支持
-
利用Memcached在php下实现session机制 替换PHP的原生session支持_PHP教程