Cookies以鍵值的方式記錄會話跟蹤的內容.服務器利用響應報頭Set-Cookie來發送COOKIE信息.在RFC2109中定義的SET-COOKIE響應報頭的格式爲:
Set-Cookie: Name = Value; Comment = value; Domain = value; Max-Age = value; Path = Value;
Secure; Version = 1 * DIGIT;跨域
Name是Cookie的名字,Value是它的值.Name=Value屬性值對必須首先出現,在此以後的屬性-值對能夠以任何順序出現. 在Servlet規範中,用於會話跟蹤的cookie的名字必須是JSESSIONID,Comment屬性是可選的,由於Cookie可能包含其它有關用戶私有的信息.這個屬性容許服務器說明這個Cookie的使用,用戶能夠檢查這個消息,然話決定是否加入或繼續會話.Domain屬性也是可選的.它用來指定Cookie在哪個域中有效.所指定的域必須以點號(.)來開始.Max-Age屬性是可選的,用於定義Cookie的生存時間,以秒爲單位.若是超過了這個時間,客戶端就應該丟棄這個cookie.若是指定的秒數爲0,表示這個cookie應當即被丟棄.Path屬性是可選的,用於指定這個cookie在哪個URL子集下有效.Secure屬性是必需的,它的值是一個十進制數,標識cookie依照的狀態管理規範的版本.例如:
set-cookie: uid = zhangsan; Max-Age=3600; Domain=.sun.org; Path=/bbs; Version=1
它表示一個名爲uid,值爲zhangsan的cookie.生存時間爲3600秒,在sunxin.org域的 bbs路徑下有效.在3600秒後,客戶端將拋棄這個cookie. 當IE收到上面這個響應報頭後,能夠選擇接受或拒絕這個cookie.若是ID接受了這個cookie,當瀏覽器下一次發送請求到http://www.sunxin.org/bbs路徑下的資源時,同時也會發送如下的請求報頭:
cookie:uid=zhangsan.瀏覽器
下面總結:服務器
1. domain表示的是cookie所在的域,默認爲請求的地址,如網址爲www.test.com/test/test.aspx,那麼domain默認爲www.test.com。而跨域訪問,如域A爲t1.test.com,域B爲t2.test.com,那麼在域A生產一個令域A和域B都能訪問的cookie就要將該cookie的domain設置爲.test.com;若是要在域A生產一個令域A不能訪問而域B能訪問的cookie就要將該cookie的domain設置爲t2.test.com。cookie
2. path表示cookie所在的目錄,asp.net默認爲/,就是根目錄。在同一個服務器上有目錄以下:/test/,/test/cd/,/test/dd/,現設一個cookie1的path爲/test/,cookie2的path爲/test/cd/,那麼test下的全部頁面均可以訪問到cookie1,而/test/和/test/dd/的子頁面不能訪問cookie2。這是由於cookie能讓其path路徑下的頁面訪問。asp.net
3. 瀏覽器會將domain和path都相同的cookie保存在一個文件裏,cookie間用*隔開。dom
4. 含值鍵值對的cookie:之前一直用的是nam=value單鍵值對的cookie,一說到含多個子鍵值對的就蒙了。如今總算弄清楚了。含多個子鍵值對的cookie格式是name=key1=value1&key2=value2。能夠理解爲單鍵值對的值保存一個自定義的多鍵值字符串,其中的鍵值對分割符爲&,固然能夠自定義一個分隔符,但用asp.net獲取時是以&爲分割符。
ui