【狂神javaweb(四)】Cookie-Session(重点)

7.Cookie, Session

7.1.会话

简介

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

有状态会话: 有同学来过教师, 下次再来, 我们会直到这个同学曾经来过

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

客户端, 服务端

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

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

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

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

7.2.Cookie

  • 从请求中拿到cookie信息
  • 服务器响应给客户端cookie
//Cookie, 服务器端从客户端获取
Cookie[] cookies = req.getCookies();//cookie可能存在多个
cookies[i].getName();//获得cookie的key
cookies[i].getValue();//获得cookie的Value
//新建一个cookie
Cookie cookie = new Cookie("LastLoginTime", String.valueOf(System.currentTimeMillis()));
resp.addCookie(cookie);//响应给客户端一个cookie

cookie存放位置: 一般保存在C盘本地用户目录下APPdata

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

  • 一个车cookie只能保存一个信息
  • 一个web站点可以给浏览器发送多个cookie, 最多存放20个cookie
  • cookie大小限制4kb
  • 300个cookie浏览器上限

删除cookie

  • 不设置有效期, 关闭浏览器自动失效
  • 设置有效期为0 cookie.setMaxAge(0);

处理乱码-编码解码

//处理编码
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
//编码
String encode = URLEncoder.encode("张三", "utf-8");
//解码
String decode = URLDecoder.decode(cookies[i].getValue(), "utf-8");

7.3.Session(重点)

简介

  • 服务器会给每一个用户(浏览器) 创建一个session对象
  • 一个session独占一个浏览器, 只要浏览器没有关闭, 这个session就能存在
  • 用户登录之后, 整个网站都能访问 ; ----保存用户信息, 保存购物车信息

Session和cookie的区别

  • Cookie是把用户数据写给用户浏览器, 浏览器保存 (可以保存多个)
  • Session是把用户数据写到用户独占Session中, 服务器端保存 (保存重要的信息, 减少服务器资源的浪费)

获取Session流程

    //给session放值
	@Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //处理编码
        req.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");
        //获得session
        HttpSession session = req.getSession();
        //存东西到session
        session.setAttribute("name","张三");
        //获取session的id
        String id = session.getId();
        //判断session是不是新创建的
        if (session.isNew()){
            resp.getWriter().write("session创建成功,ID="+id);
        }else  {
            resp.getWriter().write("session已存在,ID="+id);
        }
        //Session创建的时候做了什么
        //把ID放到了cookie中
//        Cookie cookie = new Cookie("JSESSIONID", id);
//        resp.addCookie(cookie);
    }

//-------------------------------------------------------------------------------------------------------
	//从session取值
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //处理编码
        req.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");
        //获得session
        HttpSession session = req.getSession();
        //存东西到session
        String name = (String) session.getAttribute("name");
        System.out.println(name);
        resp.getWriter().write(name);
        
         //手动注销Session
        //session.removeAttribute("name");
        //session.invalidate();
    }

设置Session失效时间(web.xml)

    <!--设置Session默认失效时间-->
    <session-config>
        <!--15分钟后自动失效, 单位:分钟-->
        <session-timeout>15</session-timeout>
    </session-config>

总结

  • 用户连接时会自动发一个sessionID, 手动删除后再连接也会自动发送

  • 用户拿到的sessionID是通过cookie传递

  • 同一个浏览器只能获取一个session

  • 使用场景

    • 保存一个登录用户的信息
    • 购物车信息
    • 在整个网站中经常会使用的数据, 保存在session中
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值