php實(shí)現(xiàn)session自定義會話處理器的方法
本文實(shí)例講述了php實(shí)現(xiàn)session自定義會話處理器的方法。分享給大家供大家參考。具體分析如下:
session自定義會話處理器,即就是說,所有關(guān)于session的各種操作,都可以通過自定義會話來自己決定。什么意思呢?先來看php.ini里的session.save_handler配置。
默認(rèn)情況下,session.save_handler = files,表示調(diào)用的是系統(tǒng)定義好的處理器(所謂處理器,其實(shí)就是一大堆函數(shù)/方法)。您可從將session.save_handler設(shè)置成 user 或者 memcache,甚至是網(wǎng)絡(luò)文件系統(tǒng)(云計(jì)算)。
session.save_handler = user:表示調(diào)用自定義的會話處理器; session.save_handler = memcache:表示...略....(大致是保存在內(nèi)存里,效率更高)。
當(dāng)設(shè)置 session.save_handler = files 時(shí),關(guān)于session的操作,實(shí)際上調(diào)用了session.set_save_handler(具體查看php手冊)的六個(gè)回調(diào)函數(shù)(所謂回調(diào)函數(shù),就是系統(tǒng)調(diào)用的,不需要指定調(diào)用)。六個(gè)回調(diào)函數(shù)見下面代碼,php手冊里也有:
function open($save_path, $session_name)
{
global $sess_save_path;
$sess_save_path = $save_path;
return(true);
}
function close()
{
return(true);
}
function read($id)
{
global $sess_save_path;
$sess_file = "$sess_save_path/sess_$id";
return (string) @file_get_contents($sess_file);
}
function write($id, $sess_data)
{
global $sess_save_path;
$sess_file = "$sess_save_path/sess_$id";
if ($fp = @fopen($sess_file, "w")) {
$return = fwrite($fp, $sess_data);
fclose($fp);
return $return;
} else {
return(false);
}
}
function destroy($id)
{
global $sess_save_path;
$sess_file = "$sess_save_path/sess_$id";
return(@unlink($sess_file));
}
function gc($maxlifetime)
{
global $sess_save_path;
foreach (glob("$sess_save_path/sess_*") as $filename) {
if (filemtime($filename) + $maxlifetime < time()) {
@unlink($filename);
}
}
return true;
}
session_set_save_handler("open", "close", "read", "write", "destroy", "gc");
session_start();
// proceed to use sessions normally
?>
當(dāng)你把 session.save_handler設(shè)置為user時(shí),你可以把上面這段代碼重寫,改成你所需要的方法,在執(zhí)行php文件里調(diào)用即可。比如,默認(rèn)情況下,我們保存 session 的文件名,都是以 sess_ 開頭的,其實(shí)就是在這里設(shè)置的,你可以改成你想要的。
當(dāng)然,你也可以修改 session 保存的方式,默認(rèn)是保存在文件里,您可以保存到數(shù)據(jù)庫里(當(dāng)然不建議你這么做,數(shù)據(jù)庫讀取速度更慢),也可以設(shè)置保存在內(nèi)存里(速度最快,在memcache相關(guān)內(nèi)容中有詳細(xì)講解)。
希望本文所述對大家的php程序設(shè)計(jì)有所幫助。
相關(guān)文章
PHP隨機(jī)數(shù)生成代碼與使用實(shí)例分析
在PHP程序設(shè)計(jì)中,隨機(jī)數(shù)的生成尤為重要。我們需要用隨機(jī)數(shù)在我們的頁面中展示隨機(jī)記錄(比如圖片、用戶記錄、文章ID等)。2011-04-04
PHP實(shí)現(xiàn)將多個(gè)文件中的內(nèi)容合并為新文件的方法示例
這篇文章主要介紹了PHP實(shí)現(xiàn)將多個(gè)文件中的內(nèi)容合并為新文件的方法,涉及php編碼轉(zhuǎn)換、文件與目錄的遍歷以及文件讀寫相關(guān)操作技巧,需要的朋友可以參考下2017-06-06
Laravel快速入門之composer介紹及安裝詳細(xì)圖文步驟
這篇文章主要介紹了Laravel快速入門之composer 介紹以及安裝詳細(xì)圖文步驟,圖文步驟講解的很清楚,有對這方面不懂的同學(xué)可以研究下2021-01-01
PHP extract 將數(shù)組拆分成多個(gè)變量的函數(shù)
extract()函數(shù)提取關(guān)聯(lián)數(shù)組(對數(shù)字索引數(shù)組無效)每對key和value,生成以key為變量名、value為對應(yīng)值的多組新變量。2010-06-06
PHP開發(fā)工具ZendStudio下Xdebug工具使用說明詳解
我使用的是XAMPP的集成開發(fā)平臺環(huán)境。里面已經(jīng)預(yù)設(shè)了Xdebug的調(diào)試工具,只需要自己改下配置的就可以了2013-11-11
如何使用Laravel Eloquent來開發(fā)無限極分類
在網(wǎng)上商城上,我們經(jīng)??梢钥吹蕉嗉壏诸?、子分類、甚至無限極分類。本文將向你展示如何優(yōu)雅的通過 Laravel Eloquent 將其實(shí)現(xiàn)。2021-05-05

