Java EE中的會話技術(cookie與session)

什麼是會話技術

  • 會話: 一次會話包含多次請求和響應

    • 一次會話: 瀏覽器第一次給服務器資源發送請求,會話建立,直到有一方斷開爲止
  • 功能: 在一次會話的範圍的多次請求,共享數據

  • 方式:

    1. 客戶端會話技術: Cookie
    2. 服務器端會話技術: Session

Cookie:

  1. 概念 : 客戶端會話技術,將數據保存到客戶端

  2. 快速入門

		* 使用步驟
			1. 創建Cookie(String name, String value);
				* Cookie cookie = new Cookie("msg", "hhh");
				
			2. 發送Cookie對象
				* response.addCookie(Cookie cookie) 

			3. 獲取Cookie,拿到數據
				* Cookie[] request.getCookies()  
  1. 實現原理
    * 基於響應頭set-cookie和請求頭cookie實現

  2. cookie的細節

    1. 一次可不可以發送多個cookie?
      * 可以
      * 可以創建多個cookie對象,使用response調用多次addCookie方法發送cookie即可

    2. cookie在瀏覽器中保存多長時間?

      1. 默認情況下,當瀏覽器關閉後,Cookie數據被銷燬
      2. 持久化存儲:
        setMaxAge(int second)
        1. 整數: 將cookie數據寫到硬盤中.持久化存儲. cookie存活時間.
        2. 負數: 默認值
        3. 零: 刪除cookie信息
    3. cookie能不能存中文?
      * 在tomcat8之前 cookie中不能直接存儲中文數據

    4. cookie共享問題?

			1. 假設在一個tomcat服務器中,部署了多個web項目,那麼在這些web項目中cookie能不能共享
				* 默認情況下cookie不能共享

				* setPath(String path): 設置cookie的獲取範圍. 默認情況下,設置當前的虛擬目錄
				
				* 如果要共享則可以將path設置爲"/"

			2. 不同的tomcat服務器間cookie共享問題?
				* setDomain(String path):設置一級域名相同,那麼多個服務器之前cookie可以共享
				
				* setDomain(".baidu.com"), 那麼tieba.baidu.com和news.baidu.com中cookie可以共享
  1. Cookie的特點和作用
	1. cookie存儲數據在客戶端瀏覽器
		2. 瀏覽器對於單個cookie的大小有限制(4kb) 以及 對同一個域名下的總cookie數量也有限制(20個)

		* 作用:
			1. cookie一般用於存儲少量不敏感的數據
			2. 在不登錄的情況下,完成服務器對客戶端的身份識別

Session

  • 概念: 服務器端會話技術, 在一次會話的多次請求共享數據,將數據保存在服務器端的對象中.HttpSession

  • 快速入門

	1. 獲取Session對象
		* HttpSession session = request.getSession();
		
	2. 使用HttpSession對象:
		* Object getAttribute(String name)  //獲取
		* void setAttribute(String name, Object value)  //存儲
		* void removeValue(String name)  	//移除

	3. 原理
		* Session的實現是依賴於Cookie的

	4. 細節:
		1. 當客戶端關閉後,服務器不關閉,兩次獲取Session是否同一個?
			* 默認情況下  不是
			* 如果需要相同,則可以創建Cookie,鍵爲JSESSION,設置最大存活時間,讓cookie持久化保存
				Cookie cookie = new Cookie("JSESSIONID",session.getId());
		        cookie.setMaxAge(60*60);
		        response.addCookie(cookie);
			
		2. 客戶端不關閉,服務器關閉後,兩個獲取的Session是同一個嗎?
			* 不是同一個, 但是要確保數據不丟失
				* session的鈍化:
					* 在服務器正常關閉之前,將session對象系列化到硬盤上
				* session的活化
					* 在服務器啓動後,將session文件轉換爲內存中的session對象即可
				
		3. Session什麼時候被銷燬?
			1. 服務器關閉
			2. session對象調用invalidate().
			3. session默認的失效時間30分鐘
				* 選擇性配置修改
					<session-config>
						<session-timeout>30</session-timeout>
					</session-config>

	5. session的特點
		1. session用於存儲一次會話的多次請求的數據, 存在服務器端
		
		2. session可以存儲任意類型, 任意大小的數據

		* session與Cookie的區別:
			1. session存儲數據在服務器端,Cookie在客戶端
			
			2. session沒有數據大小限制,Cookie有
			
			3. seesion數據安全,Cookie相對不安全
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章