此篇主要微微講解一下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; }