一、session時間週期設置
方法1:
在php文件中添加如下代碼:
/* 控制session時間*/
$lifetime=60*90;
session_set_cookie_params($lifetime);
session_regenerate_id(true);
方法2:
修改php.ini文件:
要實現Session的永久生命期,首先需要了解一下php.ini關於Session的相關設置
(打開php.ini文件,在“[Session]”部分):
1、session.use_cookies:默認的值是“1”,代表SessionID使用Cookie來傳遞,反之就是使用Query_String(url中?後的值)來傳遞;
2、session.name:這個就是SessionID儲存的變量名稱,可能是Cookie,也可能是
Query_String來傳遞,默認值是”PHPSESSID”;
3、session.cookie_lifetime:這個代表SessionID在客戶端Cookie儲存的時間,默認是0,代表瀏覽器一關閉SessionID就作廢……就是因爲這個所以Session不能永久使用!
4、session.gc_maxlifetime:這個是Session數據在服務器端儲存的時間,如果超過這個時間,那麼Session數據就自動刪除!
因此,此時應修改session.gc_maxlifetime的值,比如90分鐘,將其session.gc_maxlifetime=60*90
二、php的session多級目錄存放解決大量臨時文件效率問題
1、問題
當一個目錄下有很多文件時,服務器的處理性能會變低,php默認的session僅僅存放在/var/lib/php5目錄下,未進行分級,當有一定的訪問量時,就存在性能問題了。
2、解決方法
session多級存放可以緩解一個目錄下session文件過多帶來的讀寫效率問題。
session.save_path string 設置創建session臨時文件的路徑。默認爲 /tmp,咱們的服務器是存放在/var/lib/php5下。參見 session_save_path()。
此指令還有一個可選的 N 參數來決定會話文件分佈的目錄深度。例如,設定爲 '5;/tmp' 將使創建的會話文件和路徑類似於
/tmp/4/b/1/e/3 /sess_4b1e384ad74619bd212e236e52a5a174If
要使用 N 參數,必須在使用前先創建好這些目錄。在 ext/session 目錄下有個小的 shell 腳本名叫 mod_files.sh 可以用來做這件事。此外注意如果使用了 N 參數並且 N 大於 0,那麼將不會執行自動垃圾回收,更多信息見 php.ini。
另外如果用了 N 參數,要確保將 session.save_path 的值用雙引號 “quotes” 括起來,因爲分隔符分號( ;)在 php.ini 中也是註釋符號。
參考以上說明,在定義session.save_path中可以定義多級存放的路徑,於是我們可以修改php.ini中的session.save_path爲:
session.save_path = “2;/var/lib/php5”
一般情況下2級目錄就夠了,就能夠處理相當大的訪問量了
如此將session文件分成兩級存放,即類似於
/var/lib/php5/4/b/sess_4b1e384ad74619bd212e236e52a5a174If
取session的前兩位字符作爲二級目錄索引,但是php並不生成目錄,需要自己手工生成,這裏提供一個php腳本來生成初始的目錄。
$string = '0123456789abcdefghijklmnopqrstuvwxyz';
$length = strlen($string);
function makeDir($param){
if(!file_exists($param)) {
echo "mkdir ".$param."\n";
// exec("mkdir ".$param);
mkdir($param,0777);
}
}
for($i = 0; $i < $length; $i++) {
makeDir('/var/lib/php5/'.$string[$i]);
for($j = 0; $j < $length; $j++) {
makeDir('/var/lib/php5/'.$string[$i].'/'.$string[$j]);
}
}
session目錄分級處理之後,IO處理值增加,http進程降低,web處理效率明顯好轉