讀取cookie字符串方法:
復制代碼 代碼如下:
alert(document.cookie);
一個網站的cookie字符串包含了該站點域名下的所有cookie(javascript 可訪問的,不包括 httponly 的cookie ),多個cookie之間用分號和一個空格隔開,最多一般是 20個或50個,例如,包含2個cookie的字符串格式為
復制代碼 代碼如下:
document.cookie = "key1=value1; key2=value2"
一個cookie字符串最長為4k,超出個數限制或長度限制時將返回空值, cookie 個數超出限制時,會造成另外一些 cookie 丟失,按規范,丟失的應該是 最近、最少使用的,但是浏覽器的實現並不完全遵循這個規范。
設置一個cookie的方法:
復制代碼 代碼如下:
document.cookie="key=value;expires=date;path=/;domain=xxx.com;secure";
要設置多個cookie 只要反復使用 document.cookie = XXX 即可,會自動和其他cookie拼接成一個cookie字符串。
如果要讀取某個cookie的值,只能通過解析cookie字符串來得到。
下面是設置cookie時的幾個參數
1、名和值:key 為 cookie名稱,value為cookie值
2、過期時間:expires用於設置過期時間,為格林威治字符串格式,如
復制代碼 代碼如下:
expires = new Date('2011-12-30').toUTCString(); //"Fri, 30 Dec 2011 00:00:00 GMT"
如果沒有設置過期時間,cookie將在浏覽器關閉時失效。
3、所屬路勁:網站某張網頁中的腳本所設置的cookie默認情況下只能供該網頁所在文件夾及其子文件夾中的網頁訪問,如 http://www.jb51.net/aa/1.html 所設置的cookie 不能被 http://www.jb51.net/bb/2.html 訪問,更多的時候都希望一個cookie能被本站所有網頁訪問,這就需要設置path屬性, path=/ 表示該cookie的所屬路勁是網站根目錄,這樣本站所有網頁都能訪問。
4、所屬域名:cookie無法跨域訪問,一般情況下,cookie僅供本站使用,如果想在多個網站下共享,那麼共享cookie的網站必須擁有同一個主域名,通過設置 domain屬性來實現。比如,如果想讓 www.jb51.net 和 bbs.jb51.net這兩個二級域名下的網站共享cookie,在設置cookie時需要設置domain=jb51.net
5、加密傳輸:如果一個cookie帶有secure屬性,那麼cookie在傳輸到服務器的過程中將使用加密數據的方式傳輸。
cookie字符串編碼:
cookie字符串中不能包含空格,分號,逗號等特殊符號,如果可能包含這些符號,可以使用encodeURIComponent()函數將 cookie 的值進行編碼,讀取 cookie 的值時再使用decodeURIComponent()函數把值進行轉換回來,如 document.cookie="key="+encodeURIComponent(value);
在服務器設置 cookie 並聲明其私密性(secure 及 httponly):
有時候為安全,你可能需要限制一些 cookie 的訪問
secure : 該 cookie 僅供 https 安全連接使用
httponly : cookie 僅供 http 傳輸過程中使用,javascript 不能訪問該 cookie
例如,在PHP 中使用內置函數setcookie() 設置一個具有私密性限制的 cookie
setcookie("UserIDCookie","123456",time()+60*30,'/','mytest.com',false,true);
其中第六個參數 表示是否僅供 https 連接使用,第 七個參數 true 表示是否為 httponly
跨域請求及第三方 cookie ,以及 P3P(個人隱私保護策略):
浏覽器的隱私設置(或者內容設置,chrome 在高級設置--內容設置 選項)中,設置禁止使用第三方 cookie 時,跨域請求(包括 iframe ,img ,javascript 文件等請求)無法發送屬於該域的 cookie .
例如, 通過 iframe 引用一個跨域的 頁面 http://www.jb51.net/index.html ,即使浏覽器中保存了屬於 other.com 域名下的某個名為 otherLoginFrag 的cookie ,在 iframe 中請求 該頁面時, otherLoginFrag 並不會隨請求一起發往 www.other.com 的服務器。
第三方 cookie 限制在不同的浏覽器中可能略有不同,比如, safari 在禁用 第三方 cookie 時,from 表單的提交也只有 post 方式才能提交 cookie .
如果在希望在浏覽器禁用 第三方cookie 時仍能發送跨域請求的 cookie ,就需要在跨域的服務器中使用 P3P 響應頭預先聲明允許發送的 cookie.
復制代碼 代碼如下:
//php header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"'); setcookie("UserIDCookie","123456");