cookie 和 HttpSession

保存会话数据的两种技术

Cookie

Cookie 是客户端技术,程序把每个用户的数据以cookie的形式写给用户的浏览器。当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去。web资源处理的就是用户各自的数据了。

 

HttpSession

session是服务端技术,服务器在运行时可以为每个用户的浏览器创建一个独享的HttpSession对象,由于session为用户浏览器独享,所以用户再次访问时会拿取session中数据。

案例一:使用cookie记录上次访问的时间

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        //拿到客户端携带的记录上次访问时间的cookie:加上cookie的名字是lastaccesstime,值是一个long类型额数字
        //拿到客户端携带的所有的cookie
        Cookie[] c = request.getCookies();
        //循环判断,拿到需要的cookie
        for (int i = 0; c != null&&i < c.length ; i++) {
            Cookie cookie = c[i];
            if(cookie.getName().equals("lastaccesstime")){
                out.write("你上次访问的时间是:");
                String time = cookie.getValue();
                //time-->long
                long t = Long.parseLong(time);
                //formate
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
                //create a date object
                Date d = new Date(t);
                //output 
                out.write(sdf.format(d) + "&nbsp;<a href=''>清除cookie</a>");
            }
        }
        //向客户端发送cookie
        Cookie nc = new Cookie("lastaccesstime",new Date().getTime()+"");

      //设置缓存时间,放到硬盘上,不在缓存中,默认cookie的生命周期就是一个会话
      nc.setMaxAge(Integer.MAX_VALUE);

//发送到客户端
        response.addCookie(nc);
    }

 删除客户端cookie

因为没有删除cookie的方法,所以通过添加新的cookie来覆盖之前的cookie

"&nbsp;<a href='"+ request.getContextPath() + "/servlet/cookie2" +"'>清除cookie</a>"

cookie2

public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        //没有删除的方法,所以就创建一个同名的cookie,将存活时间设置为0,覆盖客户端原来的cookie
        Cookie c = new Cookie("lastaccesstime","");//不需要设置值,就是为了失效,根本用不到
        c.setMaxAge(0);
        //发送到客户端
        response.addCookie(c);
    }

 获取上次的cookie

需要指定cookie的路径,只有cookie的路径和访问路径对应才能获取:

设置路径

nc.setPath(request.getContextPath());

获取cookie

public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        out.write("你上次访问的时间是:");
        //需要设置浏览器携带cookie的路径
        
        //拿到所有的cookie
        Cookie[] cs = request.getCookies();
        //拿到记录上次访问时间的cookie
        for (int i = 0; cs != null && i < cs.length; i++) {
            Cookie c = cs[i];
            if(c.getName().equals("lastaccesstime")){
                String value = c.getValue();
                
                out.write(value);
            }
        }
    }

cookie是否为唯一 :域名 + 访问路径 + Cookie的名字

 

posted @ 2016-12-05 19:00  kangjie  阅读(254)  评论(0编辑  收藏  举报