Cookie的工作原理:
Cookie是最常用的客戶會話跟蹤技術。Cookie是將會話數據保存在客戶端來維護會話狀態的一種方式。它是服務器發送給瀏覽器的體積很小的純文本信息,用戶以後在訪問同一個Web服務器時,瀏覽器會把Cookie原樣發送給服務器。通過這種方式,保存了用戶的會話狀態。
Cookie分爲兩類:持久的和暫時的。持久的Cookie會被存儲在客戶端文件中;暫時的Cookie存儲在內存中,一旦瀏覽器關閉Cookie就消失了。一般來說,客戶端瀏覽器一般只允許存放300個Cookie,每個站點最多存放20個Cookie,每個Cookie的大小限制爲4kb,因此Cookie不會佔用太大的硬盤空間。雖然Cookie很好用而且持久性高,但是由於有些用戶擔心Cookie對個人隱私有威脅,會關閉Cookie。一旦這樣,便無法利用Cookie來達到會話追蹤的功能了。下面看看Cookie具體怎麼使用:
SetCookies.java(寫入)
- import java.io.*;
- import javax.servlet.http.*;
- import javax.servlet.*;
- public class SetCookies extends HttpServlet {
- public void doGet(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- Cookie c1 = new Cookie("password", "123");
- response.addCookie(c1);
- Cookie c2 = new Cookie("client_ip", request.getRemoteAddr());
- //設置cookie的生命週期爲一個小時,單位爲秒
- c2.setMaxAge(60*60);
- response.addCookie(c2);
- response.getWriter().println("SetCookies OK!");
- }
- }
ShowCookies.java(讀取)
- import java.io.*;
- import javax.servlet.http.*;
- import javax.servlet.*;
- public class ShowCookies extends HttpServlet {
- public void doGet(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- Cookie[] Cookies = request.getCookies();
- for (int i=0; i<Cookies.length; i++) {
- Cookie c = Cookies[i];
- response.getWriter().println(c.getName() + ", " + c.getValue());
- }
- }
- }
Session的工作原理:
HttpSession對象自動爲開發者提供一個可以方便地存儲會話信息的地方,HttpSession的會話機制是基於Cookie和URL重寫(URL重寫就是利用GET方法,在URL的尾部添加一些額外的參數來達到會話追蹤的目的)技術,融合了這兩種技術的優點。當客戶端允許使用Cookie時,HttpSession對象使用Cookie進行會話追蹤,如果客戶端禁用Cookie,則選擇使用URL重寫。
session與Cookie一樣擁有特定的生命週期。一個session可以利用isNew方法來得知是否爲一個新的session。所謂“新”的session就是說,他已經被Server產生,但是Client尚未被告知。
一般來說,session在一段時間內沒有起作用就會自動失效,也就是Server會自動控管session失效的時間,不過時間的長短通常因容器而異,也可以自己手動設定session的失效時間。下面看看session具體怎麼使用:
SetSessionServlet.java(寫入)
- import java.io.*;
- import javax.servlet.http.*;
- import javax.servlet.*;
- public class SetSessionServlet extends HttpServlet {
- public void doGet(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- HttpSession session = request.getSession(true);
- session.setAttribute("ip", request.getRemoteAddr());
- response.getWriter().println("SetSession OK!");
- }
- }
ShowSessionServlet.java(讀出)
- import java.io.*;
- import javax.servlet.http.*;
- import javax.servlet.*;
- public class ShowSessionServlet extends HttpServlet {
- public void doGet(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- HttpSession session = request.getSession(true);
- String ip = (String)session.getAttribute("ip");
- response.getWriter().println("ip=" + ip);
- }
- }
簡單的總結了一下,正在學習中... ...