###### 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 ![](https://i.imgur.com/lff8fsL.png) - 上方選Application ![](https://i.imgur.com/tKRUBSu.png) - 左邊選Cookies展開->選擇該網站的DomainName ![](https://i.imgur.com/qY8TRIO.png) - 找到該DomainName的session 不確定的話就看右邊的Expires..內容為Session->Delete ![](https://i.imgur.com/A4hIo2t.png)