會話跟蹤

Servlet-平常筆記2java


什麼是會話和會話跟蹤?

  會話:能夠簡單理解爲一個用戶,打開了一個瀏覽器,訪問某一個站點,訪問web資源,而後關閉瀏覽器,這個過程就是一個會話。web

  會話跟蹤:HTTP是無狀態協議,也就是沒有記憶力,這就產生了問題,每一個請求之間沒法共享數據,在一個會話中,共享數據即會話跟蹤。瀏覽器

 

會話跟蹤方法:

  1)使用參數在請求中傳遞:在資源名稱後面添加參數。安全

  格式:路徑?參數名=參數值。session

  而後在須要使用該數據的地方經過request的getParameter()方法獲取該參數值。spa

  2)使用Cookiecode

  Cookie:把須要共享的數據,保留在客戶端(瀏覽器)中。對象

  步驟:接口

  /*建立Cookie*/
      Cookie c = new Cookie("currentname","test");   /*添加Cookie到響應中,傳遞給瀏覽器保存*/   response對象.addCookie(c);   /*在請求中獲取Cookie和數據*/   Cookie[] cs = request對象.getCookies();
  /*修改Cookie指定名的value值*/
    方法一:獲取Cookie對象後使用setValue()方法更改。
    方法二:從新建立一個同名的Cookie,覆蓋原有的Cookie。    

  注意:修改以後,要調用response對象的addCookie()方法。生命週期

  /*Cookie的生命週期*/

    缺省狀況:關閉瀏覽器後Cookie丟失。

    可經過setMaxAge(int seconds)方法來設置,可設置值爲正數、負數和0.

    seconds>0:表示Cookie存活的時間。

    seconds<0:表示存放在瀏覽器進程中,缺省狀況。

    seconds=0:表示刪除Cookie。

  /*Cookie的路徑和域範圍*/

    Cookie對象.setPath(String path);

    若不設置,則使用存放CookieServlet資源名的相對路徑。

    Servlet跳轉時若路徑不一樣,則沒法獲取Cookies。

    設置在整個應用中在請求的時候都鞋帶Cookie的方法:

    Cookie對象.setPath("/");

    

    在不一樣應用/主機之間如何共享Cookie?

    經過設置域解決。

    先了解一下二級域名,二級域名須要配置好虛擬主機,常見的有百度的二級域名,如music.baidu.com、tiebai.baidu.com,這些二級域名之間都會共享登錄信息。

    設置域的方法:

    Cookie對象.setPath("/");

    Cookie對象.setDomain(".baidu.com");

 

  3)HttpSession類

  javax.servlet.http.HttpSession HttpSession技術實際上仍是利用Cookie技術 

  session是一種服務端技術,把共享數據保存在服務端。(Cookie是保存在客戶端)

  每個HttpSession對象,都有惟一的一個ID,是一個特殊的Cookie:

  • 這個Cookie的name是"JSESSIONID"。
  • 這個Cookie的value是該對象的id,一長串相似於地址的字符。

  方法:

    1.獲取Session對象/建立Session對象。

    HttpSession s = request對象.getSession();  等同於getSession(true).

    HttpSession s = request對象.getSession(true); 若是當前有Session對象,直接返回,不然建立一個。

    HttpSession s = request對象.getSession(false); 若是當前有Session對象,直接返回,不然返回null。

    2.存儲數據到Session中

    Session對象.setAttribute(String name, Object value);

    3.從Session中獲取數據

    Object val = session對象.getAttribute(String name);

    4.修改session中的數據

    從新設置一個同名的屬性名。

    5. 刪除Session

    刪除指定名稱的數據:Session對象.removeAttribute(String name);

    刪除整個Session對象:Session對象.invalidate(); 經常使用於註銷登陸

    6.Session拓展

    封裝多個信息做爲對象存儲到Session中。

    通常咱們習慣把Session對象讓他實現序列化接口(java.io.Serializable),緣由是當多態服務集羣的時候,彼此之間能夠共享Session數據。

    序列化:把對象轉換爲二進制數據。

    反序列化:把二進制數據恢復成對象。

    該接口沒有方法。

    7.Session超時管理

    Session對象.setMaxInactiveInterval(int seconds);

    表示上一次操做以後,指定時間內無交互,則Session會被自動銷燬。(保證安全,釋放內存)

    

  1.參數傳遞的方法會暴露敏感信息,不可行。

  2.Cookie也面臨許多問題:一個Cookie只能存儲一個簡單類型的數據,value只能存String類型,當對象有多個屬性時則不可行;Cookie的大小限制在4KB以內瀏覽器保存Cookie的個數也有限多人使用一臺電腦,也會致使信息不安全。

  3.Tomcat中的Session默認超時時間爲30分鐘,通常20來分鐘就銷燬了。

相關文章
相關標籤/搜索