Cookie的小知识
Cookie
Cookie是保存在客戶端的名稱/值的字符串對。當前瀏覽器從服務器響應中接收到Set-Cookie Http頭時,就會設置Cookie,稍后如果請求的URL與該Cookie相關的Path以及domain的
限制匹配時,瀏覽器會將該Cookie發送回服務器。
設置會話Cookie:
protected void page_load(object sender,EventArgs e)
{
??? HttpCookie cookie = new HttpCookie("name");
??? cookie.Value = "value";
??? this.Response.AppendCookie(cookie);
}
上面的Cookie,因為沒有設置過期時間,這個Cookie會一直保持到瀏覽器關閉。
在JavaScript創建Cookie:
function SetCookie(name,value){
??? document.cookie = name +'='+escape(value);
}
單個Cookie中多個名稱/值對:
HttpCookie cookie = new HttpCookie("name");
cookie.Vlaues["V1"] = "va1";
cookie.Vlaues["V2"] = "va2";
創建會生成一個單獨的Cookie,保存形式:name=v1=va1&v2=va2
Cookie屬性
除了名稱/值對外,Set-Cookie http頭還支持各種屬性,這些屬性會影響瀏覽器對Cookie的處理方式。
1、expires,該屬性包含一個時間,告訴瀏覽器它應該保存這個Cookie多長時間 ,后期之后,瀏覽器就會刪除這個Cookie。
protected void page_load(object sender,EventArgs e)
{
??? HttpCookie cookie = new HttpCookie("name");
??? cookie.Value = "value";
??? cookie.Expires = DateTime.Now.AddYears(1);
??? this.Response.AppendCookie(cookie);
}
在js中:
function SetCookie(name,value,minutes){
??? var exp = new Date(new Date().GetTime()+minutes*60000);
??? document.Cookie = name + '=' + escape(value) +';expires='+exp.ToGmtString();
}
要刪除Cookie,只要設置對應Cookie的expires屬性即可,設為過去的時間。
2、path該屬性是區分大小寫的字符串,為了讓瀏覽器能將Cookie發送給服務器,path屬性必須以url的domain路徑開始,path不僅僅可以設置為文件夾名稱。設置path的url必須指
定的path屬性字符串開始,以便匹配該屬性。
舉例:Http://www.cnblogs.com/ch03/page.aspx有效的path設置包括:
/ 、/ch 、/ch03 、/ch03/ 以及 /ch03/page
如果你的目的是將path指定為文件夾名,那么path應該以斜線結尾。
瀏覽器為相同的域名保存多個名稱相同的path不同的Cookie,因此有可能會接受到多個相同名稱的Cookie,要消除歧義并不容易,因此Cookie屬性,比如path不會在Cookie中返回
服務器中。
默認的path是/,意思是改域名下的所有的url,瀏覽器都會發送Cookie給服務器。
要設置path屬性,確保path限制作用:
protected void page_load(object sender,EventArgs e)
{
??? HttpCookie cookie = new HttpCookie("name");
??? cookie.Value = "value";
??? cookie.Path = "/ch03/";
??? this.Response.AppendCookie(cookie);
}
在js中:
function SetCookie(name,value,path){
??? document.Cookie = name + '=' + escape(value) +';path='+path;
}
3、domain該屬性告訴瀏覽器哪一個域名與Cookie相關聯,如果需要設置Cookie讓其對多個子域名可見,那就可以使用這個屬性。
對請求的url使用EndsWith()匹配比較domain屬性值,相匹配則Cookie可見:
protected void page_load(object sender,EventArgs e)
{
??? HttpCookie cookie = new HttpCookie("name");
??? cookie.Value = "value";
??? cookie.Domain = ".cnblogs.com";
??? this.Response.AppendCookie(cookie);
}
在js中:
function SetCookie(name,value,dom){
??? document.Cookie = name + '=' + escape(value) +';domain='+dom;
}
4、HttpOnly改屬性告訴瀏覽器該Cookie對Javascript不可見
protected void page_load(object sender,EventArgs e)
{
??? HttpCookie cookie = new HttpCookie("name");
??? cookie.Value = "value";
??? cookie.HttpOnly = true;
??? this.Response.AppendCookie(cookie);
}
5、secure該屬性只會是https頁面會發生給瀏覽器,不然不可見:
protected void page_load(object sender,EventArgs e)
{
??? HttpCookie cookie = new HttpCookie("name");
??? cookie.Value = "value";
??? cookie.Secure = true;
??? this.Response.AppendCookie(cookie);
}
在js中:
function SetCookie(name,value,dom){
??? document.Cookie = name + '=' + escape(value) +';secure';
}
6、讀取Cookie
protected void page_load(object sender,EventArgs e)
{
??? HttpCookie cookie = this.Request.Cookie["name"];
??? if(cookie!=null)
??? {
??????? string value = cookie.Value;
??? }
}
在js中:
function GetCookie(name){
??? var allcookies = document.Cookie;
??? var start= allcookies.indexof(name+'=');
??? if(start == -1)
??? {
?????? return null;
??? }
??? start += name.length+1;
??? var end = allcookies.indexof(';',start);
??? if(end == -1)
??? {
??????? end = allcookies.length;
??? }
??? var cookieval = allcookies.substring(start,end);
??? return unescape(cookieval);
}
總結
以上是生活随笔為你收集整理的Cookie的小知识的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Windows 2008在域中不能更改密
- 下一篇: 【转】(原創) 如何使用ModelSim