Session:
特性:
- 第一次訪問時, Server 為 Client 創建一個 session-id, 並把 session-id 回傳,存在 Client 的 Cookie中。
- 下次訪問時,Client 會帶著 Cookie訪問,Server會檢查有沒有帶session-id。若有,會找出對應的文件,把訊息讀取出來 ,若沒有,會建立一個session-id。
- session_destroy(),並清除cookie,這樣 Client、 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:
特性:
- Cookie size 限制: 根據 RFC-2965 的規定,一個 Cookies 最大可以是 4096 bytes,而一個 domain 最多只能有 20 cookies。
- 佔據網路流量: 由於每次 request 都必須將 Cookie 的資料放在 headers,所以當 Cookie 的資料變大時,request 也會跟著變大,過大的 request 會影響網路傳輸的速度。
- Cookie 資料可被使用者竄改: 由於 Cookies 存在 browser 中,所以使用者可透過瀏覽器查看 Cookie 的資料以及其結構,當使用者任意竄改 Cookies 的資料時可能會導致資料外洩或者系統流程出錯。
Cookies 只能儲存結構簡單,容量小且無意義的資訊,且必須符合『同源政策』。