天天看點

cookie 與 session深入學習

我們知道http協定時無狀态的 那麼我們在浏覽網站的時候 如何跟蹤一個使用者的行為呢  很明顯我們要解決的問題是我們需要知道是哪一個使用者通路了

 于是cookie就出現了 他的原理就是在使用者的用戶端儲存一個cookie(你可以了解為一個唯一辨別)

比如A通路了http://www.xxx.com的網站 那麼該網站就會生成一個cookie在A使用者的用戶端

然後每次A使用者的用戶端再去通路該網站時候就會自動帶上這個cookie (注意:cookie是有時間的 一旦過期後就不會自動帶上了 )這樣的話

網站就能夠跟蹤使用者了  那麼cookie裡面可以儲存哪些資料呢 字元串 中文(會進行urlencode編碼)等 同樣cookie可以删除 更新

我們要注意一點

cookie是有過期時間的 就是說網站授權用戶端多長時間 如果一旦超過了這個時間 用戶端就不會自動帶上了 也就是說cookie就失效了

顯然服務端需要告訴用戶端過期時間 如果沒有設定過期時間的話 預設關閉用戶端時cookie自動失效 

cookie檔案一般儲存在c:/document and setting/adminitrator/cookies下面

     cookie這裡我們做個總結 簡單來說 cookie就是為了跟蹤使用者用的  頒發一個cookie給通路者(含有過期時間) 下次通路者帶上這個cookie即可 資料是儲存在用戶端的

接下來我們介紹session 其實session也是用來跟蹤使用者的 隻不過儲存的位置不一樣  是儲存在服務端的 其原理還是基于cookie

關鍵是為什麼還要設計session這種東西呢 當然是有原因的 第一 我們知道cookie是儲存在用戶端的 那麼資料是極其不安全的  第二

每一次用戶端去通路服務端的時候都會把資料帶到服務端那麼着過程就需要很大的帶寬  第三 可以對使用者資料進行統一管理 

session的原理其實跟cookie一樣也是在用戶端生成一個cookie 不同的是 把資料以檔案的形式(後者儲存在記憶體都是可以)儲存在服務端 

每次用戶端把cookie帶過卡來時 服務端就會調用該cookie對應的session檔案然後讀取資料 從本質上講是一樣的 隻不過做了一下中轉

這裡大家可能會問 既然session是基于cookie的 那麼如果禁用的用戶端的cookie 那麼服務端的cookie就儲存不到用戶端了 

那麼資料自然就帶不過去服務端 自然就讀取不到資料了那怎麼辦 我們知道生成session的時候我們會生成一個cookie

那麼我們就可以在url上面帶上cookie值 這樣就解決了 (因為用戶端禁用了cookie是以用戶端不能自動發送cookie

服務端等于替用戶端發)sesison 幾乎可以儲存所有資料類型 包括對象 數組等等 session預設儲存在c:/window/temp下面 

當然我們是可以修改的

   session這裡我們做個總結 簡單來說 session也是用來追蹤使用者的 跟cookie不同的是 cookie是儲存在用戶端 session是儲存在服務端的  統一管理 更加安全

  關于session我們再來談幾點:

  session預設的儲存路徑可以修改 通過php.ini的session,save_path修改

 session 可以自定義  讀 寫 回收 關閉 清除

[php] view plaincopy

  1. <?php  
  2. function open($save_path, $session_name)   
  3. {  
  4.   global $sess_save_path, $sess_session_name;  
  5.   $sess_save_path = $save_path;  
  6.   $sess_session_name = $session_name;  
  7.   return(true);  
  8. }  
  9. function close()   
  10. function read($id)   
  11.   $sess_file = "$sess_save_path/sess_$id";  
  12.   if ($fp = @fopen($sess_file, "r")) {  
  13.     $sess_data = fread($fp, filesize($sess_file));  
  14.     return($sess_data);  
  15.   } else {  
  16.     return(""); // Must return "" here.  
  17.   }  
  18. function write($id, $sess_data)   
  19. {//這裡我們可以把session儲存到你認為合适的地方  
  20.  global $sess_save_path, $sess_session_name;  
  21.   if ($fp = @fopen($sess_file, "w")) {  
  22.     return(fwrite($fp, $sess_data));  
  23.     return(false);  
  24. function destroy($id)   
  25.   return(@unlink($sess_file));  
  26. /********************************************* 
  27. * WARNING - You will need to implement some * 
  28. * sort of garbage collection routine here.  * 
  29. *********************************************/  
  30. function gc($maxlifetime)   
  31.   return true;  
  32. session_set_save_handler("open", "close", "read", "write", "destroy", "gc");  
  33. session_start();  
  34. // proceed to use sessions normally  
  35. ?>   

這裡我們可以看到 

這一句是說明了 我們自己注冊關于session的讀 寫 清除 回收 關閉一系列回調函數 要想使用此功能還需要設定 session.save_handler = user 預設為file

最後我們來說說session的回收機制(gc)

繼續閱讀