PHP之session與cookie

一、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);     
        }     
    }     
}
相關文章
相關標籤/搜索