<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # 一、單系統登錄機制 ## 1、http無狀態協議   web應用采用browser/server架構,http作為通信協議。http是無狀態協議,瀏覽器的每一次請求,服務器會獨立處理,不與之前或之后的請求產生關聯,這個過程用下圖說明,三次請求/響應對之間沒有任何聯系 ![](https://box.kancloud.cn/003b6505768d279f17c11bcbb7942cd0_439x425.png)   但這也同時意味著,任何用戶都能通過瀏覽器訪問服務器資源,如果想保護服務器的某些資源,必須限制瀏覽器請求;要限制瀏覽器請求,必須鑒別瀏覽器請求,響應合法請求,忽略非法請求;要鑒別瀏覽器請求,必須清楚瀏覽器請求狀態。既然http協議無狀態,那就讓服務器和瀏覽器共同維護一個狀態吧!這就是會話機制 ## 2、會話機制   瀏覽器第一次請求服務器,服務器創建一個會話,并將會話的id作為響應的一部分發送給瀏覽器,瀏覽器存儲會話id,并在后續第二次和第三次請求中帶上會話id,服務器取得請求中的會話id就知道是不是同一個用戶了,這個過程用下圖說明,后續請求與第一次請求產生了關聯 ![](https://box.kancloud.cn/0450f791ab187d228f773702cb0ab920_498x460.png)   服務器在內存中保存會話對象,瀏覽器怎么保存會話id呢?你可能會想到兩種方式 請求參數 cookie   將會話id作為每一個請求的參數,服務器接收請求自然能解析參數獲得會話id,并借此判斷是否來自同一會話,很明顯,這種方式不靠譜。那就瀏覽器自己來維護這個會話id吧,每次發送http請求時瀏覽器自動發送會話id,cookie機制正好用來做這件事。cookie是瀏覽器用來存儲少量數據的一種機制,數據以”key/value“形式存儲,瀏覽器發送http請求時自動附帶cookie信息   tomcat會話機制當然也實現了cookie,訪問tomcat服務器時,瀏覽器中可以看到一個名為“JSESSIONID”的cookie,這就是tomcat會話機制維護的會話id,使用了cookie的請求響應過程如下圖 ![](https://box.kancloud.cn/4a378a290875e9fe33cd2a8be7dcbd5f_499x460.png) ## 3、登錄狀態   有了會話機制,登錄狀態就好明白了,我們假設瀏覽器第一次請求服務器需要輸入用戶名與密碼驗證身份,服務器拿到用戶名密碼去數據庫比對,正確的話說明當前持有這個會話的用戶是合法用戶,應該將這個會話標記為“已授權”或者“已登錄”等等之類的狀態,既然是會話的狀態,自然要保存在會話對象中,tomcat在會話對象中設置登錄狀態如下 ``` HttpSession session = request.getSession(); session.setAttribute("isLogin", true); ```   用戶再次訪問時,tomcat在會話對象中查看登錄狀態 ``` HttpSession session = request.getSession(); session.getAttribute("isLogin"); ```   實現了登錄狀態的瀏覽器請求服務器模型如下圖描述 ![](https://box.kancloud.cn/3149c47ea1254d7ccaacb60368617243_570x537.png)   每次請求受保護資源時都會檢查會話對象中的登錄狀態,只有 isLogin=true 的會話才能訪問,登錄機制因此而實現。   
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看