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的小知识
最新推荐文章于 2022-12-07 17:42:01 发布
本文详细介绍了Cookie的工作原理,包括如何在ASP.NET和JavaScript中创建、设置属性及读取Cookie。涵盖expires、path、domain等关键属性及其对Cookie可见性和生命周期的影响。
摘要由CSDN通过智能技术生成