天天看點

為什麼可以通過request擷取session_Cookie與Session

一、Cookie

為什麼可以通過request擷取session_Cookie與Session
1、Cookie的本質與相關屬性
Cookie是什麼?

Cookie:伺服器儲存到浏覽器的東西。它的形式是鍵值對(名+值為一個Cookie),是以它具有Name和Value屬性。

為什麼可以通過request擷取session_Cookie與Session
浏覽器怎麼判斷哪個伺服器/伺服器上的jsp檔案可以通路該Cookie呢?

Cookie具有Path屬性,它是浏覽器用來判斷伺服器能否通路該Cookie:若伺服器的檔案通路路徑包含Cookie路徑,那麼可以通路該Cookie;否則不能通路。

例如:Cooke1的Path為:/Project,jsp1的路徑(通路路徑):/Project/a.jsp,jsp2的路徑:/AProject/a.jsp。那麼jsp1可以通路Cookie1,而jsp2不可以通路Cookie1

Cookie儲存在浏覽器的哪裡,儲存多長時間呢?

Cookie可以儲存在記憶體或者硬碟中。若儲存在記憶體中,浏覽器關閉就清除Cookie;若儲存在硬碟中,則會儲存Cookie最大生命周期時間。

Cookie的MaxAge屬性,是與Cookie生命周期相關的屬性。如果MaxAge>0,那麼Cookie會在硬碟中儲存,儲存其數值的時間(機關是秒);如果MaxAge=0,那麼Cookie會被立刻删除;如果MaxAge<0,那麼Cookie在記憶體中儲存,關閉浏覽器時清除Cookie。

Cookie相關内容補充

Cookie是由Http協定制定的(由浏覽器建立對象)。

擁有9大内置對象(包括request、response)。

Cookie的實作(相關方法)
為什麼可以通過request擷取session_Cookie與Session
Cookie[] request.getCookies(); // 傳回所有Cookie對象(以Cookie數組形式)
void response.addCookie(String name,String value); // 向浏覽器中存入給定名與值的Cookie           

二、Session

為什麼可以通過request擷取session_Cookie與Session
Session是什麼?

Session:由伺服器建立并儲存在伺服器端的,面向一次會話,以參數Attribute(名+值)形式儲存資料的東西

  • 伺服器建立,儲存在伺服器端
  • 調用getSession方法時,若Cookie有JSESSIONID,根據其找Session,若沒有就重新建立Session并儲存對應的JSESSIONID在Cookie上;若沒有JSESSIONID,則新建立Session,同時儲存JSESSIONID在Cookie上
  • 以參數(名+值)形式儲存資料
  • 一次會話(時間)中,一個伺服器的多個Servlet/Jsp對象共享
  • 多個浏覽器/用戶端通路伺服器時,每個會話都會建立新的Session
Session的實作
為什麼可以通過request擷取session_Cookie與Session
/* Session的使用*/
           
配置Session最大不活動時間
//位置:web.xml檔案

<session-config>
        <session-timeout>數值(機關為min)<session-timeout/>
</session-config>           
Session于依賴Cookie或者是URL重寫,怎麼了解?

>Session的建立需要SessionId,Cookie存儲SessionId,是以有Cookie必定可以使用Session,即Session依賴于Cookie。

>通過URL重寫,把SessionId放在通路伺服器網頁的URL中,也可以起到相同效果,是以Session也可以依賴于URL重寫

//URL重寫的實作
//位置: xxx.jsp
<a href="<%= response.encodeURL(/Project1/Aservlet) %>" target="_blank" rel="external nofollow" >點選這裡<a/>