-
cookie是存在于客户端(浏览器)。
cookie:是服务器给客户端发送的一小份数据,并存放在客户端上。
cookie的内容主要包括:名字,值,过期时间,路径和域(domian)。其中路径与域一起构成cookie的作用范围。若不设置过期时间,则表示这个cookie的生命期为浏览器会话期间,关闭浏览器窗口,cookie就消失。
- 为什么使用cookie
HTTP请求是无状态的。客户端在与服务器通信的时候,是无状态的,即客户第二次访问同一个网站时,服务器端不知道客户是第二次访问。cookie是为了使用户有更好的体验,可以利用它实现下面一些功能。
- 应用场景(可以短时间内保存一些数据)
自动登录、浏览记录、统计第几次访问、购物车等
- 具体应用
①向浏览器添加一个cookie(名字,值,过期时间,路径和域)
Cookie co3 = new Cookie("user02","jju");
co3.setMaxAge(60*60*24);//设置时间,单位s
co3.setPath("/");
response.addCookie(co3);
Cookie co4 = new Cookie("psd02","123");
response.addCookie(co4);
②寻找浏览器中的cookie
PrintWriter out = response.getWriter();
Cookie[] cookies = request.getCookies();//获得浏览器中的cookie,返回的是一个cookie数组
if(cookies!=null) {
for (int i = 0; i < cookies.length; i++) {
out.print("<p>" + cookies[i].getName() + ":");
out.print(cookies[i].getValue() + "</p>");
}
}
③用户第几次访问该网页
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
Cookie[] cookies = request.getCookies();
int count = 1;
if(cookies != null){
for(int i=0;i<cookies.length;i++){//判断是否是访问前一次的cookie
if("count".equals(cookies[i].getName())){
count = Integer.parseInt(cookies[i].getValue());
count++;
break;
}
}
Cookie co = new Cookie("count",String.valueOf(count));//将每次访问的次数,存储至
cookie中
response.addCookie(co);
out.print("此用户是第"+count+"次访问");
}
④显示用户登录的上次的时间
//寻找上次登录的cookie
public static Cookie findCookie(Cookie[] cookies,String name){
if (cookies != null){
for(int i=0;i<cookies.length;i++){
if(name.equals(cookies[i].getName())){
return cookies[i];
}
}
}
return null;
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
/*获得cookie数组,并保证每次寻找的cookie是同一个*/
Cookie []cookies = req.getCookies();
Cookie cookie = findCookie(cookies,"time");
/*第一次登陆,记录下当前的时间*/
if(cookie == null){
Cookie c = new Cookie("time",System.currentTimeMillis()+"");
c.setMaxAge(60*60*24);
resp.addCookie(c);
resp.getWriter().write("欢迎你首次登录!!!");
}else {
/*第二次登录,有cookie*/
long lastTime = Long.parseLong(cookie.getValue());//获取上次时间
resp.getWriter().write("欢迎你,你上次登录的时间是:" + new Date(lastTime)); //显示时间
cookie.setValue(System.currentTimeMillis() + ""); //重置时间
resp.addCookie(cookie);
}
}
⑤显示商品记录 :当用户点击商品后,可以浏览详情。当返回到商品列表时,在下面显示浏览的记录。
思路:a.当用户首次点击商品列表的商品时,会向服务器端发送一个servlet请求 (list?id=1)并携带参数(id:标志当前的商品)。
b.到了servlet控制端,则要先获取提交过来的ID,把id存放至cookie的value属性中,然后跳转至商品的详细界面。平常 记录的条数肯定不止一条,用户多次查看不同商品详情时,我们可以通过字符拼接的形式存储它的id值,即记录下多条数据。
c.当从商品详情界面返回时取出当前的cookie中的ID,然后跳转至浏览界面,查看浏览记录。在显示时,我们在jsp界面 中获取Cookie对象中的value属性中存放的ID值,并通过字符串拆分的形式,根据ID把记录显示出来。