什麼是cookie
某些網站為了辨別使用者身份而儲存在使用者本地終端(Client Side)上的資料(通常經過加密)。
Cookie總是儲存在用戶端中,按在用戶端中的儲存位置,可分為記憶體Cookie和硬碟Cookie。記憶體cookie會隨著瀏覽器的關閉而失效。
因為HTTP協議是無狀態的,即伺服器不知道使用者上一次做了什麼,這嚴重阻礙了互動式Web應用程式的實現。
Cookie就是用來繞開HTTP的無狀態性的“額外手段”之一。伺服器可以設定或讀取Cookies中包含資訊,藉此維護使用者跟伺服器session中的狀態。
以上摘自維基百科
類似Javascript變數,Cookie由變數名和值組成。
其屬性裡既有標準的Cookie變數,也有使用者自己建立的變數,屬性中變數是用“變數=值”形式來儲存。
根據Netscape公司的規定,Cookie格式如下:
Set-Cookie: NAME=VALUE;Expires=DATE;Path=PATH;Domain=DOMAIN_NAME;SECURENAME=VALUE:
這是每一個Cookie均必須有的部分。NAME是該Cookie的名稱,VALUE是該Cookie的值。在字串“NAME=VALUE”中,不含分號、逗號和空格等字元。
Expires=DATE:
Expires變數是一個唯寫變數,它確定了Cookie有效終止日期。
該屬性值DATE必須以特定的格式來書寫:星期幾,DD-MM-YY HH:MM:SS GMT,GMT表示這是格林尼治時間。反之,不以這樣的格式來書寫,系統將無法識別。該變數可省,如果預設時,則Cookie的屬性值不會儲存在使用者的硬碟中,而僅僅儲存在記憶體當中,Cookie檔案將隨著瀏覽器的關閉而自動消失。
Domain=DOMAIN-NAME:
Domain該變數是一個唯寫變數,它確定了哪些Internet域中的Web伺服器可讀取瀏覽器所存取的Cookie,即只有來自這個域的頁面才可以使用Cookie中的資訊。這項設定是可選的,如果預設時,設定Cookie的屬性值為該Web伺服器的網域名稱。
Path=PATH:
Path屬性定義了Web伺服器上哪些路徑下的頁面可擷取伺服器設定的Cookie。一般如果使用者輸入的URL中的路徑部分從第一個字元開始包含Path屬性所定義的字串,瀏覽器就認為通過檢查。如果Path屬性的值為“/”,則Web伺服器上所有的WWW資源均可讀取該Cookie。同樣該項設定是可選的,如果預設時,則Path的屬性值為Web伺服器傳給瀏覽器的資源的路徑名。
可以看出我們藉助對Domain和Path兩個變數的設定,即可有效地控制Cookie檔案被訪問的範圍。
Secure:
在Cookie中標記該變數,表明只有當瀏覽器和Web Server之間的通訊協定為加密認證協議時,瀏覽器才向伺服器提交相應的Cookie。當前這種協議只有一種,即為HTTPS。
cookie有啥用?
- 定製個人化空間
使用者訪問一個網站,可能由於費用、頻寬節流設定等原因,並不希望瀏覽網頁所有的內容。Cookie可根據個人喜好進行欄目設定,即時、動態地產生使用者所要的內容,這就迎合了不同層次使用者的訪問興趣,減少使用者項目選擇的次數,更合理利用網頁伺服器的傳輸頻寬。
- 記錄網站軌跡
由於Cookie可以儲存在使用者機上,並在使用者再次訪問該Server時讀回這一特性可以協助我們實現很多設計功能,如顯示使用者訪問該網頁的次數(html5已經支援非cookie的實現);顯示使用者上一次的訪問時間;甚至是記錄使用者以前在本頁中所做的選擇等等,這可免去我們再去研究複雜的CGI編程。
- 如果在一台電腦中安裝多個瀏覽器,每個瀏覽器都會以獨立的空間存放cookie。
因為cookie中不但可以確認使用者,還能包含電腦和瀏覽器的資訊,所以一個使用者用不同的瀏覽器登入或者用不同的電腦登入,都會得到不同的cookie資訊,另一方面,對於在同一台電腦上使用同一瀏覽器的多使用者群,cookie不會區分他們的身份,除非他們使用不同的使用者名稱登入。
在與伺服器傳輸資料時,通過在地址後面添加唯一查詢串,讓伺服器識別是否合法使用者,也可以避免使用cookie。
SSL 並不能防止儲存在使用者電腦上的 Cookie 被他人讀取或操作,但它能防止 Cookie
在傳輸途中被他人截取。