會話及其會話技術【Cookie物件】
阿新 • • 發佈:2019-01-01
1、會話技術:在Web開發中,伺服器跟蹤使用者資訊的技術稱為會話技術。
2、Cookie物件:Cookie是一種會話技術,它用於將會話過程中的資料儲存到使用者的瀏覽器中,從而是瀏覽器和伺服器可以更好的進行資料互動。
3、Cookie在瀏覽器和伺服器之間的傳輸過程:當用戶第一次訪問瀏覽器時,伺服器會在響應訊息中增加Set-Cookie頭欄位,將使用者資訊以Cookie的形式傳送給瀏覽器。一旦使用者瀏覽器接受了伺服器傳送的Cookie資訊,就會將它儲存在瀏覽器的緩衝區中。這樣,當瀏覽器後續訪問該伺服器時,都會在請求訊息中將使用者資訊以Cookie的形式傳送給Web伺服器,從而使伺服器端分辨出當前請求是由哪個使用者發出的。
4、Set-Cookie語法格式:
Set-Cookie: user=itcast; Path=/;
其中,user表示Cookie的名稱,itcast表示Cookie的值,Path表示Cookie的屬性。Cookie必須以鍵值對的形式存在,其屬性可以有多個,但是這些屬性之間必須用分號和空格間隔。
5、Cookie API:為了封裝Cookie資訊,在Servlet API中提供了一個 javax.servlet.http.Cookie類,該類包含了生成Cookie資訊和提取Cookie資訊各個屬性的方法。
5.1、構造方法:Cookie類有且僅有一個構造方法,具體語法格式如下:
public Cookie(java.lang.String name, java.lang.String value)
在Cookie的構造方法中,引數name用於指定Cookie的名稱,引數value用於指定Cookie的值。Cookie一旦被建立,它的名稱就不能更改,Cookie的值可以為任意值,建立後允許被修改。
6、示例程式碼:顯示使用者上次訪問時間
package cookie; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; 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 LastAccessServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //指定伺服器輸出內容的編碼方式為 UTF-8,防止發生亂碼 response.setContentType("text/html;charset=utf-8"); //儲存使用者上一次的訪問時間 String lastAccessTime = null; //獲取所有的Cookie,並將這些Cookie存放在陣列中 Cookie[] cookies = request.getCookies(); //遍歷Cookie陣列 for(int i = 0; cookies != null && i < cookies.length; i++){ if("lastAccess".equals(cookies[i].getName())){ //如果Cookie的名稱為lastAccess,則獲取該Cookie的值 lastAccessTime = cookies[i].getValue(); break; } } //判斷是否存在lastAccess的Cookie if(lastAccessTime == null){ response.getWriter().print("您是首次訪問本站"); }else{ response.getWriter().print("您上次的訪問時間是:" + lastAccessTime); } //建立Cookie,將當前時間作為Cookie的值傳送給客戶端 String currentTime = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date()); Cookie cookie = new Cookie("lastAccess", currentTime); response.addCookie(cookie); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); } }