码迷,mamicode.com
首页 > 编程语言 > 详细

java 使用cookie记录用户上一次访问的时间 记住 用户的 登录名

时间:2015-08-13 19:31:24      阅读:555      评论:0      收藏:0      [点我收藏+]

标签:


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("恭喜!登录成功");
	}

 

java 使用cookie记录用户上一次访问的时间 记住 用户的 登录名

标签:

原文地址:http://www.cnblogs.com/weiqinshian/p/4728041.html

(1)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!