通常地 session 是以文本文件形式存儲在服務器端的。若是使用 seesion或者該 PHP 文件
要調用 session 變量 那麼就必須在調用 session 以前啓動它,使用 session_start() 函數。其它
都不須要你設置了 PHP 自動完成 session 文件的建立。其默認 session 的存放路徑是服務器
的系統臨時文件夾,可使用ini_set('session.save_path','路徑');來設置session的存放路徑。
可是若是碰到大數據量的sesstion的時候,使用基於文件的session存取瓶頸可能都是在磁盤IO
操做上,如今利用memcached來保存session數據,直接經過內存的方式,效率天然可以提升不
少。在讀寫速度上會比 files 時快不少,並且在多個服務器須要共用 session 時會比較方便,將
這些服務器都配置成使用同一組 memcached 服務器就能夠,減小了額外的工做量。
其缺點是 session 數據都保存在 memory 中,一旦當機,數據將會丟失。但對 session 數據來
說並非嚴重的問題,其自己就是臨時性數據。 <?php
class MS{
static $mem;
static $maxtime;
function __construct($mem){
self::$mem = $mem;
self::$maxtime = ini_get('session.gc_maxlifetime');
session_module_name('user');//session文件保存方式,這個是必須的!除非在Php.ini文件中設置了
session_set_save_handler(
array(__CLASS__,'open'),//在運行session_start()時執行
array(__CLASS__,'close'),//在腳本執行完成或調用session_write_close() 或 session_destroy()時被執行,即在全部session操做完後被執行
array(__CLASS__,'read'),//在運行session_start()時執行,由於在session_start時,會去read當前session數據
array(__CLASS__,'write'),//此方法在腳本結束和使用session_write_close()強制提交SESSION數據時執行
array(__CLASS__,'destroy'),//在運行session_destroy()時執行
array(__CLASS__,'gc')//執行機率由session.gc_probability 和 session.gc_divisor的值決定,時機是在open,read以後,session_start會相繼執行open,read和gc
);
session_start();//這也是必須的,打開session,必須在session_set_save_handler後面執行
}
static function open($sid){
return true;
}
static function close(){
return true;
}
static function read($sid){
return self::$mem->get($sid);
}
function write($sid,$data){
return self::$mem->set($sid,$data,MEMCACHE_COMPRESSED,self::$maxtime);
}
function destroy($sid){
return self::$mem->delete($sid);
}
function gc($maxtime){
return true;
}
}
$mem=new Memcache();
$mem->connect('127.0.0.1', '11211');
$session=new MS($mem);
$_SESSION['007']='www.i007xd.com';
//session_destroy();
echo $_SESSION['007'];
var_dump($mem->get('i3pa9v2usiem3svj0ga4apvbc3'));
?>