cookie是如何保存到客戶端,又是如何發送到服務端


Cookie相關的Http頭

    有 兩個Http頭部和Cookie有關:Set-Cookie和Cookie。
    Set-Cookie由服務器發送,它包含在響應請求的頭部中。它用於在客戶端創建一個Cookie
    Cookie頭由客戶端發送,包含在HTTP請求的頭部中。注意,只有cookie的domain和path與請求的URL匹配才會發送這個cookie。
 
Set-Cookie Header 
    Set-Cookie響應頭的格式如下所示:
 
        Set-Cookie: <name>=<value>[; <name>=<value>]...
                    [; expires=<date>][; domain=<domain_name>]
                    [; path=<some_path>][; secure][; httponly]
 
    expires=<date>: 設置cookie的有效期,如果cookie超過date所表示的日期時,cookie將失效。
                    如果沒有設置這個選項,那么cookie將在瀏覽器關閉時失效。
                    注意:date是格林威治時間(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
                            The 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>:
                    注:臨時cookie(沒有expires參數的cookie)不能帶有domain選項。
                    當客戶端發送一個http請求時,會將有效的cookie一起發送給服務器。
                    如果一個cookie的domain和path參數和URL匹配,那么這個cookie就是有效的。

                    一個URL中包含有domain和path,可以參考http://www.w3school.com.cn/html/html_url.asp
 

 
    secure   : 表示cookie只能被發送到http服務器。
    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來設置Cookie,假如說,A和B兩個進程使用Cookie通信,那么會有如下幾種情況:

 > A寫Global Cookie,B寫Session Cookie,此時,A中無法獲取Cookie

 > A寫Session Cookie,B寫Session Cookie,此時,A與B中的Cookie互不影響

 > A寫Session Cookie,B寫Global Cookie,此時A中的Cookie被Global Cookie覆蓋,它們共享一份Global Cookie

    注:這種情況的后果下,如果有任意一個進程再寫Session Cookie,那么其他進程將獲取不到Cookie 

 

 

總結

cookie的生命周期:

1、cookie的創建:服務端通過Set-Cookie的http頭要求客戶端創建,並給予其規定生命長度

2、cookie的使用:客戶端每次請求都會根據path、domain通過Cookie的http頭將cookie信息傳送給服務端。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM