1. 程式人生 > >快取、cookie、session的區別

快取、cookie、session的區別

自己的一些理解,如有問題歡迎指出

1、快取

    快取分為倆種,強快取和協商快取

       強快取:直接從本地快取中取資源,不會和伺服器通訊(由Expire和cache-control控制且後者優先順序高於前者)

                     Expire:快取過期的時間

                     cache-control:設定快取

                                   max-age=**,表示**ms之後可以使用快取

                                   no-cache:禁止使用強快取;

                                   no-store:禁止使用快取;

                                   private:只允許背終端使用者訪問;

                                   public:可以被所有使用者訪問

       協商快取:通過伺服器來告知是否使用快取

           配置:格式(響應頭、請求頭)Last-Modifed/If-Modifed-since和Etag/if-None-match(後者優先於前者)

                      Last-Modifed/If-Modifed-since:第一次請求的響應中顯示最後修改資源的時間,第二次請求的時候會在請求頭帶上

If-Modifed-since(值為第一次請求對應的響應 Last-Modifed的值),若返回狀態status為403說明沒有改變;

                     Etag/if-None-match:伺服器會根據請求的資源生成一個Etag,只要發生變化,這個標誌位就會改變,瀏覽器傳送請求的時候會發送if-None-match(值為上一次請求的響應Etag的值),伺服器根據傳上來值對比來決定是否使用快取;

2、cookie

     cookie是客戶端記錄儲存使用者身份資訊;

     當用戶第一次請求伺服器時,伺服器會返回一個cookie,客戶端收到後就儲存在本地,下次再發送請求的時候會再請求中帶上這個cookie,伺服器通過此來區分使用者的狀態;

     cookie失效:

                     預設值為-1,表示關閉瀏覽器就會失效

                     值為0:立即失效,不儲存cookie;

3、session:

     session實在伺服器記錄使用者的資訊的;

     工作流程:當用戶第一次請求伺服器時,伺服器會生成一個sessionId來區分不同的使用者,並儲存在伺服器,在響應的時候放在cookie中,當同一個使用者再次訪問伺服器時,在請求頭會帶上sessionID,伺服器通過sessionId就可以判斷使用者的狀態了,sessionId是可以設定失效時間的;

總結:

1、三者之前的區別

   快取與cookie、session的區別

      快取:只是對靜態資源的處理;

      cookie與session是為了確保通訊過程的有狀態性(http為無狀態協議,無法判斷使用者請求之間的區別:詳情檢視另外一篇)

  cookie與session的區別與聯絡:

      區別: cookie是儲存在客戶端的,而session是儲存在伺服器的;

      聯絡:sessionId的返回依賴於cookie