详细介绍HTTP Cookie
Cookie总是保存在客户端中,按在客户端中的存储位置,可分为内存Cookie和硬盘Cookie。内存Cookie由浏览器维护,保存在内存中,浏览器关闭后就消失了,其存在时间是短暂的。硬盘Cookie保存在硬盘里,有一个过期时间,除非用户手工清理或到了过期时间,硬盘Cookie不会被删除,其存在时间是长期的。所以,按存在时间,可分为非持久Cookie和持久Cookie。
Cookie相关的Http头
有两个Http头部和Cookie有关:Set-Cookie和Cookie。
Set-Cookie由服务器发送,它包含在响应请求的头部中。它用于在客户端创建一个Cookie
Cookie头由客户端发送,包含在HTTP请求的头部中。注意,只有cookie的domain和path与请求的URL匹配才会发送这个cookie。
Set-CookieHeader
Set-Cookie响应头的格式如下所示:
Set-Cookie:= [; = ]... [;expires= ][;domain= ] [;path= ][;secure][;httponly]
expires=
如果没有设置这个选项,那么cookie将在浏览器关闭时失效。
注意:date是格林威治时间(GMT),使用如下格式表示:DAY,DDMMMYYYYHH:MM:SSGMT
DAY Thedayoftheweek(Sun,Mon,Tue,Wed,Thu,Fri,Sat). DD Thedayinthemonth(suchas01forthefirstdayofthemonth). MMM Thethree-letterabbreviationforthemonth(Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec). YYYY year. HH Thehourvalueinmilitarytime(22wouldbe10:00P.M.,forexample). MM Theminutevalue. SS Thesecondvalue. domain=: path= :
注:临时cookie(没有expires参数的cookie)不能带有domain选项。
当客户端发送一个http请求时,会将有效的cookie一起发送给服务器。
如果一个cookie的domain和path参数和URL匹配,那么这个cookie就是有效的。
一个URL中包含有domain和path,可以参考https://www.nhooo.com/w3school/html/html_url.htm
secure :表示cookie只能被发送到http服务器。
httponly:表示cookie不能被客户端脚本获取到。
在程序中生成expires
C的方式
time_tcurTime=time(NULL); tm*gmTime=gmtime(&curTime); charstrExperis[50]; strftime(strTimeBuf,100,"%a,%d%b%Y%XGMT;",gmTime);
JavaScript的方式
vard=newDate(); varexpires=d.toGMTString();
Windows中的InternetSetCookie
在Windows中我们可以使用InternetSetCookie来设置Cookie,假如说,A和B两个进程使用Cookie通信,那么会有如下几种情况:
>A写GlobalCookie,B写SessionCookie,此时,A中无法获取Cookie
>A写SessionCookie,B写SessionCookie,此时,A与B中的Cookie互不影响
>A写SessionCookie,B写GlobalCookie,此时A中的Cookie被GlobalCookie覆盖,它们共享一份GlobalCookie
注:这种情况的后果下,如果有任意一个进程再写SessionCookie,那么其他进程将获取不到Cookie
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。