標籤:
package cn.itcast.cookie;import java.io.IOException;import java.io.PrintWriter;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;//記住使用者最近的一次訪問時間:lastAccessTime=23432432432public class CookieDemo1 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); //取到指定的Cookie lastAccessTime的值,列印到頁面上 out.write("您上次訪問的時間是:"); Cookie cs[] = request.getCookies(); if(cs!=null) { for(int i=0;cs!=null&&i<cs.length;i++){ Cookie c = cs[i]; if("lastAccessTime".equals(c.getName())){ String value = c.getValue(); long time = Long.parseLong(value); out.print(new Date(time).toLocaleString()); } } } else { out.write("這是你第一次訪問!"); } //把當前訪問的時間寫回去 Cookie c = new Cookie("lastAccessTime",System.currentTimeMillis()+""); /* 設定Cookie的最大儲存時間,即cookie的有效期間,當伺服器給瀏覽器回送一個cookie時,如果在伺服器端沒有調用setMaxAge方法設定cookie的有效期間, 那麼cookie的有效期間只在一次會話過程中有效,使用者開一個瀏覽器,點擊多個超連結,訪問伺服器多個web資源,然後關閉瀏覽器,整個過程稱之為一次會話, 當使用者關閉瀏覽器,會話就結束了,此時cookie就會失效,如果在伺服器端使用setMaxAge方法設定了cookie的有效期間,比如設定了30分鐘, 那麼當伺服器把cookie發送給瀏覽器時,此時cookie就會在用戶端的硬碟上儲存30分鐘,在30分鐘內,即使瀏覽器關了,cookie依然存在, 在30分鐘內,開啟瀏覽器訪問伺服器時,瀏覽器都會把cookie一起帶上,這樣就可以在伺服器端擷取到用戶端瀏覽器傳遞過來的cookie裡面的資訊了, 這就是cookie設定maxAge和不設定maxAge的區別,不設定maxAge,那麼cookie就只在一次會話中有效,一旦使用者關閉了瀏覽器,那麼cookie就沒有了, 那麼瀏覽器是怎麼做到這一點的呢,我們啟動一個瀏覽器,就相當於啟動一個應用程式,而伺服器回送的cookie首先是存在瀏覽器的緩衝中的,當瀏覽器關閉時, 瀏覽器的緩衝自然就沒有了, 所以儲存在緩衝中的cookie自然就被清掉了,而如果設定了cookie的有效期間,那麼瀏覽器在關閉時, 就會把緩衝中的cookie寫到硬碟上儲存起來,這樣cookie就能夠一直存在了。 * */ c.setMaxAge(30*24*60*60);// Integer.MAX_VALUE c.setPath(request.getContextPath());// c.setPath("/day07"); //將cookie對象添加到response對象中,這樣伺服器在輸出response對象中的內容時就會把cookie也輸出到用戶端瀏覽器 response.addCookie(c); //清空 out.write("<a href=‘/day07/servlet/CookieDemo2‘>clear</a>"); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); }}
訪問上面的servlet,顯示如下。
點擊 clear ,訪問下面的servlet,清除 cookie
1 2 3 package cn.itcast.cookie; 4 5 import java.io.IOException; 6 7 import javax.servlet.ServletException; 8 import javax.servlet.http.Cookie; 9 import javax.servlet.http.HttpServlet;10 import javax.servlet.http.HttpServletRequest;11 import javax.servlet.http.HttpServletResponse;12 //清空指定的Cookie13 public class CookieDemo2 extends HttpServlet {14 15 public void doGet(HttpServletRequest request, HttpServletResponse response)16 throws ServletException, IOException {17 Cookie c = new Cookie("lastAccessTime", "");18 c.setMaxAge(0);19 /*20 * setPath()21 * 設定cookie的有效路徑,比如把cookie的有效路徑設定為"/xdp",那麼瀏覽器訪問"xdp"目錄下的web資源時,22 * 都會帶上cookie,再比如把cookie的有效路徑設定為"/xdp/gacl",23 * 那麼瀏覽器只有在訪問"xdp"目錄下的"gacl"這個目錄裡面的web資源時才會帶上cookie一起訪問,24 * 而當訪問"xdp"目錄下的web資源時,瀏覽器是不帶cookie的25 *26 * */27 c.setPath(request.getContextPath());28 response.addCookie(c);29 //設定refresh回應標頭,讓瀏覽器3秒後跳轉到/day07/servlet/CookieDemo130 response.setHeader("Refresh", "3;URL=/day07/servlet/CookieDemo1");31 }32 33 public void doPost(HttpServletRequest request, HttpServletResponse response)34 throws ServletException, IOException {35 36 doGet(request, response);37 }38 39 }
使用者登入的時候,通過勾選,儲存使用者名稱,使用者在下次進入該網址 登入的時候,不用再輸入使用者名稱。
public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//讀取記住的使用者名稱String username = "";String checked = "";//Cookie cs[] = request.getCookies();for(int i=0;cs!=null&&i<cs.length;i++){//使用者第一次登入,cs==nullCookie c = cs[i];//解析,用戶端帶過來的cookie ,取出,cookie中儲存的使用者名稱。if("userInfo".equals(c.getName())){String value = c.getValue();//使用者名稱username = value;checked = "checked=‘checked‘";break;}}//提供登入的介面response.setContentType("text/html;charset=UTF-8");PrintWriter out = response.getWriter();out.write("<form action=‘/day07/servlet/LoginServlet‘ method=‘post‘>");//測試時,使用者名稱先不要使用中文out.write("使用者名稱:<input type=‘text‘ name=‘username‘ value=‘"+username+"‘/><br/>");//將cookie 中儲存 的使用者名稱,填充到 登入 使用者名稱 框out.write("密碼:<input type=‘password‘ name=‘password‘ value=‘‘/><br/>");out.write("<input type=‘checkbox‘ name=‘remember‘ "+checked+"/>記住使用者名稱<br/>");out.write("<input type=‘submit‘ value=‘登入‘/>");out.write("</form>");}
//完成登入//根據是否需要記住使用者名稱來寫Cookiepublic class LoginServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html;charset=UTF-8");PrintWriter out = response.getWriter();String username = request.getParameter("username");String password = request.getParameter("password");String remember = request.getParameter("remember");//驗證使用者名稱和密碼User user = UserDB.findUser(username, password);if(user==null){out.write("錯誤的使用者名稱或密碼");return;}//處理cookie: userInfo=gfyCookie c = new Cookie("userInfo",username);//將使用者名稱,寫入cookie ,儲存到瀏覽器端,使用者下次再訪問,該路徑。會將 儲存在瀏覽器端cookie,一起帶過來。 c.setPath(request.getContextPath());if(remember==null){//刪除cookiec.setMaxAge(0);}else{//記住cookiec.setMaxAge(Integer.MAX_VALUE);}response.addCookie(c);out.print("恭喜!登入成功");}
java 使用cookie記錄使用者上一次訪問的時間 記住 使用者的 登入名稱