日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > php >内容正文

php

php原生session,利用Memcached在php下实现session机制 替换PHP的原生session支持

發(fā)布時間:2023/12/10 php 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php原生session,利用Memcached在php下实现session机制 替换PHP的原生session支持 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

方法文件

session實現(xiàn)文件:memcachedsession.php

實現(xiàn)原理(也是PHP內(nèi)部session的實現(xiàn)原理):

1.先判斷客戶端有沒有sessionid,

a.沒有就添加一個sessionid給客戶端,通常是32位hash碼,同時初始化一個數(shù)組做session容器

b.如果客戶端有sessionid,則利用這個sessionid去memcached里面查數(shù)據(jù)。

2.用戶在頁面執(zhí)行過程中可以自行修改session容器里的session值

3.頁面最后會把用戶的session容器作為值,以用戶的sessionid作為鍵,把這個鍵值對保存到

memcached里面

//memcached服務(wù)器連接地址

$_MEMCACHEAUTH = array(

'host' => 'localhost'

, 'port' => 11211

);

/*

獲取一些初始化設(shè)置值

*/

$_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()方法

邏輯應(yīng)該是比較清楚的

*/

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,這個函數(shù)會在頁面執(zhí)行完的時候執(zhí)行

register_shutdown_function("_session_save_handler");

}

/*

頁面最后執(zhí)行的方法,用于保存session值,以及關(guān)閉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);

}

?>

測試文件:

設(shè)置session值

/*

設(shè)置session值文件:session_set.php

*/

include_once "memcachedsession.php";

_session_start();

$_SESSION['a'] = time();

?>

獲取session值

/*

獲取session值文件:session_get.php

*/

include_once "memcachedsession.php";

_session_start();

function getsession()

{

echo $_SESSION['a'];

}

getsession();

?>

Memcached的緩沖應(yīng)用還是非常不錯滴,呵呵,,,

轉(zhuǎn)載:jincon's 包 blog http://www.yi1.com.cn

總結(jié)

以上是生活随笔為你收集整理的php原生session,利用Memcached在php下实现session机制 替换PHP的原生session支持的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。