cookie不僅僅包含一個鍵值對,還包含域 domain 路徑path,
一般domain是請求的地址 www.baidu.com/news.html 那domain就是www.baidu.com
跨域訪問,如域A為t1.test.com,域B為t2.test.com,那么在域A生產一個令域A和域B都能訪問的cookie就要將該cookie的domain設置為.test.com;如果要在域A生產一個令域A不能訪問而域B能訪問的cookie就要將該cookie的domain設置為t2.test.com。
path表示cookie所在的目錄,asp.net默認為/,就是根目錄。在同一個服務器上有目錄如下:/test/,/test/cd/,/test/dd/,現設一個cookie1的path為/test/,cookie2的path為/test/cd/,那么test下的所有頁面都可以訪問到cookie1,而/test/和/test/dd/的子頁面不能訪問cookie2。這是因為cookie能讓其path路徑下的頁面訪問。
瀏覽器會將domain和path都相同的cookie保存在一個文件里,cookie間用*隔開
含值鍵值對的cookie:以前一直用的是nam=value單鍵值對的cookie,一說到含多個子鍵值對的就蒙了。現在總算弄清楚了。含多個子鍵值對的cookie格式是name=key1=value1&key2=value2。可以理解為單鍵值對的值保存一個自定義的多鍵值字符串,其中的鍵值對分割符為&,當然可以自定義一個分隔符,但用asp.net獲取時是以&為分割符。
理解了cookie的原理,無法刪除cookie的原因也就很清楚了,一般刪除cookie只設置了過期時間,沒設置域domain 和 path,再刪除cookie時 將domain與path一起加上就可以了
如:
//清除cookie
function clearCookie(name) {
setCookie(name, "", -1);
}
/*設置cookie*/
function setCookie(cname,cvalue,exdays){
var d = new Date();
d.setTime(d.getTime()+(exdays*24*60*60*1000));
var expires = "expires="+d.toGMTString();
var path_ = "path=/",domain_ = "domain=.baidu.com";
document.cookie = cname + "=" + cvalue + "; " + domain_ + "; " + expires + "; " + path_;
}
/*讀取Cookie*/
function getCookie(cname){
var name = cname + "=";
var ca = document.cookie.split(';');
for(var i=0; i<ca.length; i++)
{
var c = ca[i].trim();
if (c.indexOf(name)==0) return c.substring(name.length,c.length);
}
return "";
}