Cookie
Cookie 是在 HTTP 協議下,服務器或腳本可以維護客戶工作站上信息的一種方式。
Cookie 是由 Web 服務器保存在用戶瀏覽器(客戶端)上的小文本文件,它可以包含有關用戶的信息。無論何時用戶鏈接到服務器,Web 站點都可以訪問 Cookie 信息 。
目前有些 Cookie 是臨時的,有些則是持續的。臨時的 Cookie 只在瀏覽器上保存一段規定的時間,一旦超過規定的時間,該 Cookie 就會被系統清除 。
持續的 Cookie 則保存在用戶的 Cookie 文件中,下一次用戶返回時,仍然可以對它進行調用。在 Cookie 文件中保存 Cookie,有些用戶擔心 Cookie 中的用戶信息被一些別有用心的人竊取,而造成一定的損害。其實,網站以外的用戶無法跨過網站來獲得 Cookie 信息。如果因為這種擔心而屏蔽 Cookie,肯定會因此拒絕訪問許多站點頁面。因為,當今有許多 Web 站點開發人員使用 Cookie 技術,例如 Session 對象的使用就離不開 Cookie 的支持
存儲
cookie存儲在用戶端(通常是瀏覽器端),可通過JavaScript腳本,服務端response頭進行設置/修改/刪除操作
一個cookie,存在以下信息:
name 一個唯一確定的cookie名稱,通常來講cookie的名稱是不區分大小寫的。
value 存儲在cookie中的字符串值。
domain cookie對于哪個域是有效的。所有向該域發送的請求中都會包含這個cookie信息。這個值可以包含子域(如:
yq.aliyun.com),也可以不包含它(如:.aliyun.com,則對于aliyun.com的所有子域都有效).
path 表示這個cookie影響到的路徑,瀏覽器跟會根據這項配置,像指定域中匹配的路徑發送cookie。
expires 失效時間,表示cookie何時應該被刪除的時間戳(也就是,何時應該停止向服務器發送這個cookie)。如果不設置這個時間戳,瀏覽器會在頁面關閉時即將刪除所有cookie;不過也可以自己設置刪除時間。這個值是GMT時間格式,如果客戶端和服務器端時間不一致,使用expires就會存在偏差。
max-age 與expires作用相同,用來告訴瀏覽器此cookie多久過期(單位是秒),而不是一個固定的時間點。正常情況下,max-age的優先級高于expires。
HttpOnly 告知瀏覽器不允許通過腳本document.cookie去更改這個值,同樣這個值在document.cookie中也不可見。但在http請求張仍然會攜帶這個cookie。注意這個值雖然在腳本中不可獲取,但仍然在瀏覽器安裝目錄中以文件形式存在。這項設置通常在服務器端設置。
secure 安全標志,指定后,只有在使用SSL鏈接時候才能發送到服務器,如果是http鏈接則不會傳遞該信息。就算設置了secure 屬性也并不代表他人不能看到你機器本地保存的 cookie 信息,所以不要把重要信息放cookie就對了服務器端設置
cookie不僅僅只作為session會話,也可存儲一些不重要的會員個性化設置,例如:
- 用戶A通過設置cookie type:red
- 用戶A請求服務端,想獲取一個頁面
- 服務端接收到請求,并解析到type:red,給用戶A返回一個紅色風格的首頁
安全
服務端安全
首先,cookie是存儲在用戶端的,可以被用戶修改,所以服務端不能直接通過一個cookie來確定用戶身份,需要用一定的方式加密或者對等存儲(cookie作為憑證,在服務端記錄對應數據),服務端session就是使用這種方法存儲的
用戶端安全
在通常情況下,用戶端的cookie安全的,網站以外的用戶無法跨過網站來獲取用戶的cookie信息,但是有心之人可能會通過ajax方法,讓用戶訪問A網站,卻使用B網站的腳本進行敏感操作.(詳細內容可自行搜索"跨站點腳本攻擊")
phper中的cookie
在php web網站中,用戶端cookie是必不可少的,沒有cookie就無法啟用session會話,無法識別用戶身份,php中的session_start()函數就是向用戶端設置一個cookie值用于session會話.