1. 程式人生 > >網路請求中的cookie與set-Cookie的互動模式和作用

網路請求中的cookie與set-Cookie的互動模式和作用

首先我們需要思考,很多問題。

1.當很多人訪問統一個網伺服器,伺服器如何來區分不同的使用者呢?

答:sessionid,sessionid保證了瀏覽器和伺服器唯一性的通訊憑證號碼,session儲存在伺服器上,
sessionid儲存在瀏覽器等客戶端,伺服器根據瀏覽器傳送來的sessionid作為一個唯一的key值找到
對應的使用者,所以說sessionid的唯一性用來區別和查詢使用者資訊,因此sessionid的作用不言而喻了吧。

2.我們經常說瀏覽器關閉後session就會被清除,那session有生命週期麼?

答:有的,這個是伺服器的配置,瀏覽器關閉只是把sessionid給清除了,所以在此開啟瀏覽器並請求服務,
你的登入狀態無法找到,由此你需要重新登入。
一般情況下,瀏覽器如果不重新整理或者不重新請求的話,伺服器一般會快取session資料20分鐘左右。

3.cookie會被快取,sessionid儲存在cookie中,sessionid一定會被清除麼?

答:不一定,這個需要伺服器cookie的設定了,但總體而言,因安全性考量,最好不要快取sessionid

4.cookie儲存使用者狀態時需要儲存sessionid麼?

答:不需要,儲存user_id或者其他token即可

5.cookie是如何傳送到伺服器的?

答:使用http請求頭,瀏覽器進行了封裝,但在一般網路程式設計時可以加上

如

GET / HTTP/1.1
Host: www.guancha.cn
Connection: keep-alive
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36 Accept-Encoding: gzip,deflate,sdch Accept-Language: en-US,en;q=0.8 Cookie: pgv_pvi=9956446208; pbm_total_match_cookie_281589=1; has_js=1; Hm_lvt_8ab18ec6e3ee89210917ef2c8572b30e=1414852570,1414879794,1414884316,1414901793; Hm_lpvt_8ab18ec6e3ee89210917ef2c8572b30e=1414901793

6.上面的例子中沒有sessionid麼?

答:是的,沒有,sessionid只是一個代稱,這個變數名可以改變,比如在php中使用phpsessid,
在java web中jsessionid

7.登入前有sessionid,登陸後需要重新設定麼?

答:依情況而定,如果安全性要求較高的,可以重新生成一個sessionid,另外必須先銷燬之前的一個sessionid

8.sessionid生成後如何傳送到瀏覽器?

答:預設情況下,伺服器會掛載響應訊息 set-Cookie來指示瀏覽器更新sessionid,不需要手動更新

如:
HTTP/1.200 OK 
X-Powered-By: PHP/5.2.1 
Set-Cookie: TestCookie=something from somewhere; path=/ 
Expires: Thu, 19 Nov 2007 18:52:00 GMT 
Cache-Control: no-storeno-cache, must-revalidate, post-check=0, pre-check=0 
Pragmano-cache 
Content-typetext/html 

//如果是按照第7問生成的sessionid,這個也不需要手動傳送,當然也可以手動傳送

try doing it!

轉自:http://my.oschina.net/ososchina/blog/339918