java 使用cookie記錄用戶上一次訪問的時間 記住 用戶的 登錄名



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=23432432432 public 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 //清空指定的Cookie
13 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/CookieDemo1
30         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==null
			Cookie 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>");
	}

 

//完成登錄
//根據是否需要記住用戶名來寫Cookie
public 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=gfy
		Cookie c = new Cookie("userInfo",username);//將用戶名,寫入cookie ,保存到瀏覽器端,用戶下次再訪問,該路徑。會將 保存在瀏覽器端cookie,一起帶過來。 
		c.setPath(request.getContextPath());
		if(remember==null){
			//刪除cookie
			c.setMaxAge(0);
		}else{
			//記住cookie
			c.setMaxAge(Integer.MAX_VALUE);
		}
		response.addCookie(c);
		out.print("恭喜!登錄成功");
	}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM