此篇主要微微講解一下session的高級用法
php.ini配置文件中有關session高級的配置:
session.save_path:session保存地址(原路徑:C:/Users/ADMINI~1/AppData/Local/Temp)
session_name:session獲取到的名稱
session.use_trans_sid:啟用SID支持
session.gc_maxlifetime: 垃圾回收器, 指定過了多少秒之後數據就會被視為垃圾,並被清除
session.gc_probability=1
session.gc_divisor=100
這兩合起來就是啟動gc進程管理概率的
初始化時(session_start())
概率=session.gc_probability/session.gc_divisor
session.use_cookie = 1:是否使用cookie
session.cookie_path = '/':cookie保存路徑
session.cookie_domain = '': 一般不用改
session.cookie_lifetime = 0: 保存時間長
session.save_handler = files:用文件來保存會話信,改成user
session.save_handler=memcache: 如果是memcache,那麼save_path=tcp://localhost:11211
一、首先在配置文件中將session.save_handler的值改為user (原本是files),將session數據保存路徑改到D盤

二、在根目錄下創建相關的文件

session.php 是公共的頭文件,one.php 是session注冊事件文件,two.php 是測試文件,three.php 是注銷文件
one.php:
";
two.php:
';
echo session_name().'='.session_id()."
";
";
session.php 要使用到 session_set_save_handler() 函數,查看手冊其用到的參數,再開啟session
session_set_save_handler("open","close","read","write","destroy","gc");
session_start();
open():
//在運行session_start()是調用,讀取session到$_SESSION中
function open($save_path, $session_name){
global $sess_save_path; //將保存路徑設置為全局變量
$sess_save_path=$save_path; //讀取的路徑給保存路徑
return true;
}
close():
//session_wirte_close()和session_destroy()
function close(){
return true;
}
read():
//session_start(),$_SESSION
//自動把session_id傳進來
function read($id){
global $sess_save_path;
$sess_file=$sess_save_path."/kf_".$id;
return (string)@file_get_contents($sess_file);
}
//腳本結束時和使用session_write_close()強制提交SESSION數據時
//直接調用$_SESSION[]="aaa";
function write($id, $sess_data){
global $sess_save_path;
//定義保存文件及文件名
$sess_file=$sess_save_path."/kf_".$id;
if($fp=@fopen($sess_file, "w")){
$return=fwrite($fp, $sess_data);
fclose($fp);
return $return;
}else{
return false;
}
}
//session_destroy()時
function destroy($id){
global $sess_save_path;
$sess_file=$sess_save_path."/kf_".$id;
//刪除路徑對象的文件
return @unlink($sess_file);
}
//session.gc_probability和session.gc_divisor決定的,在open()和read()讀數據時,
function gc($maxlifetime){
global $sess_save_path;
//所有過期的都要刪除
//glob遍歷出所有以"/kf"的文件作為每一個文件
foreach(glob($sess_save_path."/kf_*") as $filename){
if(filetime($filename)+$maxlifetime < time()){
@unlink($filename);
echo $filename;
}
}
return true;
}