利用Memcached在php下實現session機制 替換PHP的原生session支援

來源:互聯網
上載者:User

方法檔案
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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.