-->

2020年3月17日 星期二

Session vs Cookie



Session: 



特性:
  • 第一次訪問時, Server 為 Client 創建一個 session-id, 並把 session-id 回傳,存在 Client 的 Cookie中。
  • 下次訪問時,Client 會帶著 Cookie訪問,Server會檢查有沒有帶session-id。若有,會找出對應的文件,把訊息讀取出來 ,若沒有,會建立一個session-id。
  • session_destroy(),並清除cookie,這樣 Client、 Server就沒關係了。
優點:
  • 存於 Server,安全性高
缺點:
  • 效能問題,佔 Server記憶體資源 (每個用戶都要有自己的 session 文件,光找文件就耗不少資源)
  • Cookie 沒開的話, Session也不能用 (透過 php.ini 設定 session.use_trans_sid = 1,這樣 sessionID 就可以透過網址的方式傳回 server ,不用透過 cookie )。
失效時機:
    與php.ini設置相關 => session.cookie_lifetime = 0  //0表示cookie存活至瀏覽器關閉
                                  session.gc_probability = 1
                                  session.gc_divisor = 100
                                  session.gc_max_lifetime = 1440 //預設session逾時為24分鐘
檔案存放位置:
    與php.ini設置有關 => session.save_handler = file

Cookie:

特性:
  1. Cookie size 限制: 根據 RFC-2965 的規定,一個 Cookies 最大可以是 4096 bytes,而一個 domain 最多只能有 20 cookies
  2. 佔據網路流量: 由於每次 request 都必須將 Cookie 的資料放在 headers,所以當 Cookie 的資料變大時,request 也會跟著變大,過大的 request 會影響網路傳輸的速度。 
  3. Cookie 資料可被使用者竄改: 由於 Cookies 存在 browser 中,所以使用者可透過瀏覽器查看 Cookie 的資料以及其結構,當使用者任意竄改 Cookies 的資料時可能會導致資料外洩或者系統流程出錯。
Cookies 只能儲存結構簡單,容量小且無意義的資訊,且必須符合『同源政策』。

沒有留言:

張貼留言