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