一、什麼是會話?
•會話可簡單理解為:使用者開一個瀏覽器,點選多個超連結,訪問伺服器多個web資源,然後關閉瀏覽器,整個過程稱之為一個會話。
會話過程中要解決的一些問題?
•每個使用者在使用瀏覽器與伺服器進行會話的過程中,不可避免各自會產生一些資料,程式要想辦法為每個使用者儲存這些資料。
•例如:使用者點選超連結通過一個servlet購買了一個商品,程式應該想辦法儲存使用者購買的商品,以便於使用者點結帳servlet時,結帳servlet可以得到使用者購買的商品為使用者結帳。
二、儲存會話資料的兩種技術
Cookie
•Cookie是客戶端技術,程式把每個使用者的資料以cookie的形式寫給使用者各自的瀏覽器。當使用者使用瀏覽器再去訪問伺服器中的web資源時,就會帶著各自的資料去。這樣,web資源處理的就是使用者各自的資料了。
•
Session
•Session是伺服器端技術,利用這個技術,伺服器在執行時可以為每一個使用者的瀏覽器建立一個其獨享的session物件,由於session為使用者瀏覽器獨享,所以使用者在訪問伺服器的web資源時,可以把各自的資料放在各自的session中,當使用者再去訪問伺服器中的其它web資源時,其它web資源再從使用者各自的session中取出資料為使用者服務。
cookie 儲存上次訪問時間程式碼:
package com.dzq.cookie; import java.io.IOException; import java.util.Date; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/CookieDemo1") public class CookieDemo1 extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //response.setHeader("Set-Cookie", "name=bingxiang"); response.setContentType("text/html;charset=utf-8"); Cookie cs[]=request.getCookies(); Cookie findc=null; if(cs!=null){ for(Cookie c:cs){ if("lasttime".equals(c.getName())){ findc=c; } } } if(findc==null){ response.getWriter().write("No-cookie"); }else{ Long lasttime=Long.parseLong(findc.getValue()); response.getWriter().write("Yes-cookie"+new Date(lasttime).toLocaleString()); } Date date=new Date(); Cookie c=new Cookie("lasttime",date.getTime()+""); response.addCookie(c); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
三、cookie細節