###### tags: `PHP` `Cookie` `Session`
# Cookie & Session
- 22/5/16
# Cookie Session 發展脈絡
- 目的 : 解決多個檔案間傳值的麻煩 / 並非取代, 是減少麻煩
- GET / POST 再面對多個網頁傳遞時會比較複雜
像是ABC三個檔案, A給B B加工處理後給C, 若C要A的原檔
要B處理完給一個處理後的檔案的同時, 保留未處理A備份一同給C
依照這樣的傳值方式, 當檔案在多個頁面進行傳遞時, 寫起來會相當複雜
- Cookie的出現
因為上述原因所以發展出Cookie
假設網址有一個cookie 那個cokkie叫login, cokkie:login有個值叫ke
所有轉換的頁面 會檢查該瀏覽器有無一個叫login的cookie 並帶有ke
若有 就執行 行為A
若無 就執行 行為B
不用再像GET/POST再多個網頁間進行傳值(複雜)
只要判讀有無cookie就可以
* 缺點 : 可以被使用者關閉cookie功能,無法正常執行
* 衍生的安全問題 : cookie會留下一段文字(暫存檔)在user電腦內,
可以留下檔案在user電腦內就會有安全性問題
像是在cookie放有害的程式碼, 當user執行網頁時就會執行cokkie內的有害程式碼
雖然後來瀏覽器提供user可以暫停使用cookie功能,
但也導致某些正當網頁的cokkie無法被正常執行
- 所以更後來發展的 Session
Session存在伺服器端, 因Session再伺服器端 安全性比較高, 比較不會有被竄改的可能
Session再後來被規範僅能純文字, 降低了伺服器端自己偷塞有害程式碼的可能
user登入成功時,會再server存一個session叫login, 當user通往該server底下的其他頁面時
是user向server發出一個新的頁面請求, server會判斷有無該user的session
若有 就執行 行為A
若無 就執行 行為B
* 缺點 : session存在server,所以當無連網狀態時 session發揮不了作用
- 以上即 "狀態管理"
# Cookie Session 差異重點
傳遞資料的做法 使 個個網頁可以讀取
Cookie Session有無login資料
Cookie Session減少麻煩
有的話就執行A
沒有的話就執行B
避免多個檔案間傳值的麻煩
# Cookie
客戶端儲存
可設定過期時機
檔案式 資料表格式(作為資料庫使用)
長度和數量限制(視瀏覽器)
安全性低(但有保密模式)
客戶端可禁用或刪除
# Session
伺服器端儲存
多元儲存方式 ( 檔案式.資料庫.Json.記憶體式資料庫等, 只要server支援都可以用 )
可搭配Cookie使用 ( 通常session第一步 取得COOKIE資料, 如果沒有就用其他方式 )
儲存長度較長
安全性較高
# 從網頁刪除SESSION
- 再要刪session的網站F12

- 上方選Application

- 左邊選Cookies展開->選擇該網站的DomainName

- 找到該DomainName的session
不確定的話就看右邊的Expires..內容為Session->Delete
