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
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("clear");
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}

访问上面的servlet,显示如下。

java做一个统计浏览数功能怎么实现最好 java记录用户的浏览记录_java cookie保存时间

点击 clear ,访问下面的servlet,清除 cookie
1
2
3 packagecn.itcast.cookie;4
5 importjava.io.IOException;6
7 importjavax.servlet.ServletException;8 importjavax.servlet.http.Cookie;9 importjavax.servlet.http.HttpServlet;10 importjavax.servlet.http.HttpServletRequest;11 importjavax.servlet.http.HttpServletResponse;12 //清空指定的Cookie
13 public class CookieDemo2 extendsHttpServlet {14
15 public voiddoGet(HttpServletRequest request, HttpServletResponse response)16 throwsServletException, 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 voiddoPost(HttpServletRequest request, HttpServletResponse response)34 throwsServletException, 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
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("
");//测试时,用户名先不要使用中文 
 
out.write("用户名:
");//将cookie 中保存 的用户名,填充到 登录 用户名 框out.write("密码:
");out.write("记住用户名
");out.write("");
out.write("");
}
//完成登录
//根据是否需要记住用户名来写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("恭喜!登录成功");
}