• 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的名字

  • 相关阅读:
    第八周编程总结
    第五周课程总结&试验报告(三)
    第四周课程总结&试验报告(二)
    第三周课程总结&实验报告一
    2019春总结作业
    第一次随笔
    我人生中影响最大的三位老师
    第十二周作业
    第十一周编程总结
    第十周作业
  • 原文地址:https://www.cnblogs.com/taiguyiba/p/6135114.html
Copyright © 2020-2023  润新知