一、session與cookie的關係 php
衆所周知,session是存儲在服務器端,cookie是存儲在客戶端,若是禁用了瀏覽器的cookie功能,不少時候(除非進行了特殊配置)服務器端就沒法再讀取session,這是爲何哪?數據庫
服務器端區分session是經過session_id,這就須要客戶端在發起http請求時,把session_id傳送過來,若是瀏覽器若是開啓了cookie,當session_id從服務器被返回時,就會被瀏覽器存儲到cookie中,當再次發送http請求時,就會將cookie中的內容寫入到http head中,若是禁用了cookie,服務器就會認爲是一個新的客戶端發起的請求,就會建立一個新的session會話。瀏覽器
若是禁用了cookie,能夠經過url參數的形式傳輸給服務器,以下:服務器
ini_set('session.use_cookies',0); ini_set('session.use_only_cookies',0); ini_set('session.use_trans_sid',1);
二、session以文件存儲時,分目錄存放cookie
若是把session存放到一個目錄下,當session文件特別多時,文件的搜索很是耗時,通常的解決方案是,自定義session handler,將session存儲到內存中或者數據庫中,第二個方案是,分多級目錄存放session。第一種方案,若是存在內存中,須要安裝memcache等內存管理工具。php自己支持session多級目錄存放,只須要簡單的修改一下配置文件便可,修改方法以下:session
session.save_path = 「2;777;D:/session」;各個參數含義:2:建立二級目錄 777:權限(可讀、可寫、可執行)D:/session session存放目錄
該配置就會將session分爲兩級目錄,每一個目錄有16個子目錄[0-f],不過好像PHP session不支持建立目錄,你須要事先把那麼些目錄建立好 。工具
*注意:二級目錄php不會自動建立,須要ext/session下的工具生成,或者用代碼生成,生成二級目錄的程序以下:url
$str='0123456789abcdefghijklmnopqrstuvwxyz'; $len=strlen($str); for($i=0;$i<$len;$i++){ for($j=0;$j<$len;$j++){ $dirname='d:/session/'.$str[$i].'/'.$str[$j]; if(!file_exists($dirname)){ mkdir($dirname,0777,true) && print('成功建立目錄'.$dirname); } } }