目錄
- Cookie相關(guān)的Http頭
- Set-Cookie Header
- 在程序中生成expires
Cookie總是保存在客戶端中,按在客戶端中的存儲(chǔ)位置,可分為內(nèi)存Cookie和硬盤Cookie。內(nèi)存Cookie由瀏覽器維護(hù),保存在內(nèi)存中,瀏覽器關(guān)閉后就消失了,其存在時(shí)間是短暫的。硬盤Cookie保存在硬盤里,有一個(gè)過期時(shí)間,除非用戶手工清理或到了過期時(shí)間,硬盤Cookie不會(huì)被刪除,其存在時(shí)間是長(zhǎng)期的。所以,按存在時(shí)間,可分為非持久Cookie和持久Cookie。
Cookie相關(guān)的Http頭
有 兩個(gè)Http頭部和Cookie有關(guān):Set-Cookie和Cookie。
Set-Cookie由服務(wù)器發(fā)送,它包含在響應(yīng)請(qǐng)求的頭部中。它用于在客戶端創(chuàng)建一個(gè)Cookie
Cookie頭由客戶端發(fā)送,包含在HTTP請(qǐng)求的頭部中。注意,只有cookie的domain和path與請(qǐng)求的URL匹配才會(huì)發(fā)送這個(gè)cookie。
Set-Cookie Header
Set-Cookie響應(yīng)頭的格式如下所示:
Set-Cookie: name>=value>[; name>=value>]...
[; expires=date>][; domain=domain_name>]
[; path=some_path>][; secure][; httponly]
expires=date>: 設(shè)置cookie的有效期,如果cookie超過date所表示的日期時(shí),cookie將失效。
如果沒有設(shè)置這個(gè)選項(xiàng),那么cookie將在瀏覽器關(guān)閉時(shí)失效。
注意:date是格林威治時(shí)間(GMT),使用如下格式表示:DAY, DD MMM YYYY HH:MM:SS GMT
DAY
The day of the week (Sun, Mon, Tue, Wed, Thu, Fri, Sat).
DD
The day in the month (such as 01 for the first day of the month).
MMM
The three-letter abbreviation for the month (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec).
YYYY
year.
HH
The hour value in military time (22 would be 10:00 P.M., for example).
MM
The minute value.
SS
The second value.
domain=domain_name> :
path=some_path>:
注:臨時(shí)cookie(沒有expires參數(shù)的cookie)不能帶有domain選項(xiàng)。
當(dāng)客戶端發(fā)送一個(gè)http請(qǐng)求時(shí),會(huì)將有效的cookie一起發(fā)送給服務(wù)器。
如果一個(gè)cookie的domain和path參數(shù)和URL匹配,那么這個(gè)cookie就是有效的。
一個(gè)URL中包含有domain和path,可以參考https://www.jb51.net/w3school/html/html_url.htm
secure : 表示cookie只能被發(fā)送到http服務(wù)器。
httponly : 表示cookie不能被客戶端腳本獲取到。
在程序中生成expires
C的方式
time_t curTime = time(NULL);
tm * gmTime = gmtime(curTime);
char strExperis[50];
strftime(strTimeBuf, 100, " %a, %d %b %Y %X GMT;", gmTime);
JavaScript的方式
var d = new Date();
var expires = d.toGMTString();
Windows中的InternetSetCookie
在Windows中我們可以使用InternetSetCookie來設(shè)置Cookie,假如說,A和B兩個(gè)進(jìn)程使用Cookie通信,那么會(huì)有如下幾種情況:
> A寫Global Cookie,B寫Session Cookie,此時(shí),A中無法獲取Cookie
> A寫Session Cookie,B寫Session Cookie,此時(shí),A與B中的Cookie互不影響
> A寫Session Cookie,B寫Global Cookie,此時(shí)A中的Cookie被Global Cookie覆蓋,它們共享一份Global Cookie
注:這種情況的后果下,如果有任意一個(gè)進(jìn)程再寫Session Cookie,那么其他進(jìn)程將獲取不到Cookie
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
您可能感興趣的文章:- OkHttp3中默認(rèn)不保持Cookie的解決方法
- 淺談golang的http cookie用法
- Okhttp3實(shí)現(xiàn)爬取驗(yàn)證碼及獲取Cookie的示例
- Python HTTP客戶端自定義Cookie實(shí)現(xiàn)實(shí)例
- PHP設(shè)置Cookie的HTTPONLY屬性方法
- httpwebreqeust讀取httponly的cookie方法
- 詳解HTTP Cookie狀態(tài)管理機(jī)制