方法文件 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 (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|