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

  • 相关阅读:
    jsp mysql 实现客户端简单分页查询
    jsp mysql 实现客户端简单数据的修改和删除
    jsp 简单把数据库数据,展示在网页
    XML当做数据库,完成增删查
    xml的增删查 dom的增改查 复杂注释
    修改目录下所有文件时间
    打开调试模式
    强化学习笔记4:无模型预测 model-free prediction
    强化学习笔记6:值函数估计Value function Approximation
    Declarative Pipeline语法介绍
  • 原文地址:https://www.cnblogs.com/yelena-niu/p/9283565.html
Copyright © 2011-2022 走看看