Java web—Cookie与Session对象
接著上篇的Servlet總結,本篇文章來總結下 Cookie 和 Session
一、會話介紹
1、什么是會話?
從打開瀏覽器,到訪問頁面,到最終關閉瀏覽器 ,整個過程就是一次會話
2、會話的特性:
- 一個會話中可能包含多個請求
- 一次完整的會話只針對一個用戶
3、會話管理技術:
- Cookie 技術:客戶端技術
- Session技術:服務器技術
二、Cookie 技術:客戶端技術
1、什么是Cookie?
- Cookie是HTTP協議的規范之一,它是服務器和客戶端之間傳輸的小數據。
- Cookie就是服務器保存在客戶端的數據!(類似于會員卡,保存在用戶手中(客戶端))
- Cookie是一個鍵值對!
2、Cookie的常用用途:
- 站點跟蹤特定訪問者訪問的次數,最后訪問的時間以及訪問者進入站點的路徑;
- 幫助站點統計用戶個人資料以實現各種各樣的個性化服務。
- 實現自動登錄功能
3、Cookie的執行原理:
- 第一次訪問服務器,服務器會增加Set-Cookie頭字段,將Cookie信息發送給瀏覽器,并保存在客戶端。
- 當后續訪問服務器時,會在請求消息中將用戶信息以Cookie的形式發送給服務器,從而使服務器端分辨出當前請求是由哪個用戶發出的。
類 javax.servlet.http.Cookie 表示cookie
獲取Cookie信息的方法:
getName()名稱, getValue()值, getPath()cookie所在的目錄, getDomain()有效域 getMaxAge()有效時間, getSecure()只能使用安全的協議設置Cookie信息的方法:
setValue(), setPath(), setDomain(), setMaxAge()設置在客戶端硬盤上保存的最大時間,單位為秒從請求中獲取Cookie:
Cookie[] HttpServletRequest.getCookies( )向響應中添加cookie:
HttpServletResponse.addCookie("name","value")4、向客戶端寫入Cookie:
1、創建Cookie
Cookie c=new Cookie("name", "value");2、設置Cookie的屬性
c.setMaxAge(60*60*24); c.setDomain("pdsu.edu.cn") c.setPath("/")3、調用 response 的 addCookie 方法將其寫入到客戶端
response.addCookie(c)5、讀取Cookie的步驟:
從客戶端讀取所有能夠被本服務器讀取的Cookie:
Cookie[] cookies=request.getCookies();從中找出需要的Cookie:
for(int i=0;i<cookies.length;i++) { if( cookies[i].getName().equals(“wanted”) ){......} }例:使用Cookie對象實現歡迎信息,當用戶第一次訪問應用時顯示歡迎信息,并提示第1次訪問,依次類推。
代碼如下:
package cn.servlet;import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;public class IndexServlet extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html;charset=utf-8");Cookie[] cookies = request.getCookies();Integer integer = 0;if (cookies != null) {for (int i = 0; i < cookies.length; i++) {if ("A".equals(cookies[i].getName())) {integer = Integer.parseInt(cookies[i].getValue());}}}integer++;Cookie cookie = new Cookie("A", integer + "");if (integer <= 1) {response.getWriter().append("歡迎A").append("首次訪問本網站");} else {response.getWriter().append("歡迎A第").append(integer + "").append("次訪問本網站");}cookie.setMaxAge(10);response.addCookie(cookie);}protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}三、Session技術:服務器技術
1、什么是Session技術?
- 一種會話管理技術,將會話中的數據保存到服務器端。
- 是基于會話級別的cookie實現的。
- 通俗的講session技術就好比醫院發放給病人的就醫卡和醫院為每個病人保留病例檔案的過程,病人去醫院看病,只需要出示就醫卡,醫生根據卡號可以查到病人的就診信息。
- 當瀏覽器訪問服務器時,Servlet容器就會創建一個Session對象和ID屬性,其中,Session對象就相當于病歷檔案,ID就相當于就醫卡號,在后續訪問時,只要將標識號傳遞給服務器,就能判斷出是哪個客戶端發送的,從而選擇與之對應的Session對象為其服務, 通常情況下Session是借助Cookie技術來傳遞ID屬性的。
2、Session實現原理:
圖解:
-
session中的數據可以被一個用戶在一次會話中共享。
-
每個人的session是不同的。
- session_id的檢索和創建:
3、Session會話:
1、什么是會話跟蹤技術?
- HTTP是無狀態協議,也就是沒有記憶力的協議,每個請求之間無法共享數據。這就無法知道會話什么時候開始,什么時候結束,也無法確定發出請求的用戶身份。這說明需要使用額外的手段來跟蹤會話!
- 在一個會話中共享數據即會話跟蹤技術
2、會話追蹤過程可劃分為:
3、常用的會話追蹤機制有:
Cookies
特點:最常用
原理:引擎把用戶會話ID保存在cookie中,保存到客戶端,在以后的請求中把這個cookie發送給服務器
URL重寫
特點:性能最低
使用情況:客戶端不能接受cookie時
原理:把session id寫入URL中,這樣的URL會被引擎解析和某個session相關聯
例子:http://www.myser.com/catalog/index.htm;jsessionid=1234
表單隱藏
原理:利用HTML內hidden的屬性,把客戶端的信息,在用戶不察覺的情形下,偷偷地隨著請求一起傳送給到服務器處理
使用:
<input type="hidden" name="userID" value="15">
優點:session數據傳送到服務器端時,不會將session數據暴露在URL之上
缺點:用戶直接觀看HTML的源文件,session數據將會暴露無疑
4、會話追蹤機制比較:
5、會話管理機制:
- HttpServletRequest的getSession( )方法,若有會話則返回當前會話,沒有則創建新會話
- getSession(true) 和上面執行同樣的功能。
- getSession(false)訪問一個現有的會話、而不是新創建一個會話,如果沒有合法的會話則返回null
例:
HttpSession session=request.getSession(true)- 標準會話屬性包括:會話標識符、數據、創建時間、上次訪問時間等,都以“名-值”對形式保存
- HttpSession提供了一種把對象存儲到內存、在同一用戶的后繼請求中提取這些對象的標準辦法
- 在會話中保存數據的方法:setAttribute(String s, Object o)
- 從會話提取原來所保存對象的方法: getAttribute(String s)
1.顯式關閉:HttpSession.invalidate( )
2.隱式關閉—會話超時(等待超時自動操作)
- 默認的超時時間間隔是1800秒
- 無效之前,可以使用setInactiveInterval(int seconds)方法在客戶請求之間控制這個時間間隔。
- 設置負值可以確保會話永遠不會超時
4、Session常用方法:
getAttribute()從session中獲取以前存儲的值 setAttribute()將鍵與值關聯起來,存儲進session removeAttribute()刪除session中存儲的對應鍵的值 invalidate()刪除整個session及其存儲的鍵值 logout()注銷當前用戶 getId()獲取每個session對應的唯一ID getCreationTime()獲取session創建的時間 getLastAccessedTime()獲取session最后被訪問的時間 getMaxInactiveInterval()在用戶沒有訪問的情況下,會話在被自動廢棄之前應該保持多長時間 getAttributeNames()返回session中所有屬性的名稱5、Session監聽器:
作用:監聽對象的動作(創建、銷毀等)和狀態
- 創建的新的session對象
- 銷毀session對象
要實現session監聽器, 需要實現 javax.servlet.http.HttpSessionListener 接口
總結
以上是生活随笔為你收集整理的Java web—Cookie与Session对象的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java web—Servlet的请求与
- 下一篇: Java web—Servlet过滤器(