1. 程式人生 > >會話及其會話技術【Cookie物件】

會話及其會話技術【Cookie物件】

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);
	}
}