session和cookie

session客户端缓存,cookie服务端缓存

session翻译为会话

cookie翻译为饼干

session会话:

用户打开一个浏览器,点击了很多超链接,访问多个web资源,关闭浏览器,这个过程可以称之为会话

有状态会话:  一个同学来过教室,下次再来教室,我们会知道这个同学,曾经来过,称之为有状态会话

一个网站,怎么证明你来过?

客户端    服务端

  1.服务端给客户端一个饼干,客户端下次访问服务端带上饼干就可以了; cookie

  2.服务器登记你来过了,下次你来的时候我来匹配你; session

(第一次登记 下一次直接报名字)

当用户访问 web 页面时,他的名字可以记录在 cookie 中。 在用户下一次访问该页面时,可以在 cookie 中读取用户访问记录

Cookie就是饼干!很好理解,就是你第一次访问我我会拦截你,然后我给你分一块饼干,当你有了这个饼干就相当于有了一个令牌,以后访问不会拦截你

保存会话的两种技术
cookie

  客户端技术(响应,请求)
    `在服务器上怎么才能把东西发给客户端  通过响应

    `客户端怎么把他带到服务器上  通过请求

session

  服务器技术,利用这个技术,可以保存用户的会话信息,我们可以把信息或者数据放在Session中!

常见场景:网站登录之后,你下次不用再登录了,第二次访问直接就上去了!

记住密码就能默认登录记录cookie

Cookie和Session区别

1. 存储位置不同: cookie是保存在客户端, session是保存服务器端

2. 存储数据量大小不同: cookie存储是有限的, 不超过4KB, session是无限制的;

3.存储的数据类型不同:cookie只能存储键值对的字符串类型,而session可以存储任意类型

4.默认有效期不同:cookie默认是会话级别的cookie,而session默认有效期是30分钟

cookie 一般都是key value的形式

 每次访问都会给你一个小饼干,有了给你更新

Cookie

1.从请求中拿到cookie信息

2.服务器响应给客户端cookie

Cookie[] cookies = req.getCookies();//获得cookie
cookie.getName();//获得cookie中的key
cookie.getValue();////获得cookie中的vlaue
Cookie cookie = new Cookie("Time",System.currentTimeMillis()+"");//新建一个cookie
cookie.setMaxAge(24*60*60);//设置cookie的有效期
resp.addCookie(cookie);//响应给客户端一个cookie

cookie:一般会保存在本地的用户目录下appdata;

代码练习:

   @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    //服务器,告诉你,你来的时间,把这个时间封装成为一个信件,你下带来,我就知道你来了

   //解决中文乱码
        req.setCharacterEncoding("utf-16");
        resp.setCharacterEncoding("utf-16");

        //客户端返回一些字符串
        PrintWriter out = resp.getWriter();//out是JSP的内置对象

        //Cookie,服务器端从客户端获取
        Cookie[] cookies = req.getCookies();//这里返问数组。说明cookie可能存在多个
        //判断Cookie是否存在
        if(cookies!=null){
            //如果存在
            out.write("您上次访问是时间是:");
            for (int i = 0; i < cookies.length; i++) {
                Cookie cookie = cookies[i];
                //获取cookie的名字
                if(cookie.getName().equals("Time")){
                    //获取cookie中的值
                    long Time = Long.parseLong(cookie.getValue());
                    Date date = new Date(Time);
                    out.write(date.toLocaleString());
                }

            }
        }//服务器给客户端响应一个cookie
        Cookie cookie = new Cookie("Time",System.currentTimeMillis()+"");
        //给cookie设置有效期(在此设置的有效期是一天)
        cookie.setMaxAge(24*60*60);
        resp.addCookie(cookie);
    }

运行测试:

 一个网站cookie是否存在上限?

  一个Cookie只能保存一个信息;

  一个web站点可以给浏览器发送多个cookie,最多存放20个cookie;

  Cookie大小有限制4kb;

  300个cookie浏览器上限

删除Cookie;

  不设置有效期,关闭浏览器,自动失效;

  设置有效期时间为0;

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //创建一个cookie,名字必须要和要删除的名字一致
        Cookie cookie = new Cookie("Time",System.currentTimeMillis()+"");
        //将cookie有效期设置光0,立马过期
        cookie.setMaxAge(0);
        resp.addCookie(cookie);
    }

编码解码

 URLEncoder.encode("中文","utf-8")
 URLDecoder.decode(cookie.getValue(),"utf-8")
原文地址:https://www.cnblogs.com/nuliyao123/p/14423058.html