zoukankan      html  css  js  c++  java
  • cookie和session

    回话技术:帮助服务器记住客户端状态(区分客户端)

    cookie:数据存储在客户端本地,减少服务器端的存储压力,安全性不好,客户端可以清楚cookie

    session:数据存储在服务器端,安全性好,增加服务器压力

    cookie(不能存储中文)

    1、服务器端向客户端发送一个cookie

    //1.创建cookie对象
            Cookie cookie = new Cookie("goods", "peanut");
            //设置cookie的持久化时间
            //cookie.setMaxAge(2*60);
            //设置cookie路径
            //cookie.setPath("/WEB05/demo/SendCookieServlet");
            cookie.setPath("/WEB05");
            //2.cookie
            response.addCookie(cookie);

    删除cookie:设置一个同名同路径持久化时间为0的新cookie覆盖

    //删除客户端保存的cookie
            Cookie cookie = new Cookie("goods", "peanut");
            cookie.setPath("/WEB05");
            cookie.setMaxAge(0);
            response.addCookie(cookie);

    2、服务器端接收客户端携带的cookie

    //获取客户端的cookie数据
            Cookie[] cookie = request.getCookies();
            //通过cookiename获取cookie值
            if(cookie!=null){
                for(Cookie c:cookie){
                    String cookieName = c.getName();
                    if(cookieName.equals("goods")){
                        System.out.println(c.getValue());
                    }
                }
            }

    cookie的实际使用

    记录上一次登录时间

    Date date = new Date();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String lasttime = sdf.format(date);
            Cookie cookie = new Cookie("lasttime", lasttime);
            cookie.setMaxAge(10*60);
            response.addCookie(cookie);
            String lastaccesstime = null;
            Cookie[] cookies = request.getCookies();
            if(cookies!=null){
                for(Cookie c:cookies){
                    String cookieName = c.getName();
                    if(cookieName.equals("lasttime")){
                        lastaccesstime=c.getValue();
                        response.setContentType("text/html;charset=utf-8");
                        response.getWriter().write(lastaccesstime);
                    }
                }
            }if(lastaccesstime==null){
                    response.setContentType("text/html;charset=utf-8");
                    response.getWriter().write("第一次访问");
            }

    session(也是一个域对象)

    为每个客户端都创建一块内存空间 存储客户的数据,客户端需要每次都携带一个标识ID去服务器中寻找属于自己的内存空间

    需要借助于Cookie存储客户的唯一性标识JSESSIONID

    1、获取客户端的域对象

    HttpSession session = request.getSession();

    2、向session域中存数据

    session.setAttribute("name", "王者荣耀");

    持久化存储session

    //获取JSESSIONID
            String id = session.getId();
            //手动创建一个cookie存储JSESSIONID
            Cookie cookie = new Cookie("JSESSIONID", id);
            cookie.setPath("/WEB05");
            cookie.setMaxAge(2*60);
            response.addCookie(cookie);
            response.getWriter().write(id);

    获得session域中的内容

    //获取session对象
            HttpSession session = request.getSession();
            String name =(String)session.getAttribute("name");
            response.setContentType("text/html;charset=utf-8");
            response.getWriter().write(name);

    原理:关闭会话,session消失,指的是jsessionid消失,session还存在在服务器中,把jsessionid存储到cookie中,通过设置cookie的持久化时间,实现session的持久化使用

    session的生命周期

    1、创建:第一次执行request.getsession()时创建

    2、销毁:服务器关闭、session过期/失效(默认30分钟-从不操作服务器端的资源开始)、手动销毁   invalidate()方法

    session域的作用范围

    默认一次会话中(一次会话中任何资源公用一个session对象)

    session是把jsessionid存到cookie中,通过cookie中的id去找客户端的自己的session

  • 相关阅读:
    putty的复制 技巧
    linux下的yum命令详解
    mysql修改密码
    我的阅读编程书籍的好方法
    WINDOWS下VIM配置
    Debian下VSFTPD配置
    一个远程访问MySQL的错误(2003, 10061)的解决
    auto_increment
    hello,world!
    scss文件中使用深度选择器/deep/报错 Expected selector Jim
  • 原文地址:https://www.cnblogs.com/yelena-niu/p/9283565.html
Copyright © 2011-2022 走看看