Cookie和Session

本文深入解析了Cookie与Session的工作原理,对比了它们在客户端与服务器端的作用,详细阐述了各自的生命周期、存储方式及数据传递机制。

区别与联系

补充知识:

  • 浏览器向web容器(即web服务器)发出HTTP请求,web容器创建servlet,然后将请求信息封装进request对象并创建response空对象(由web容器通过实现HttpServletRequest等类创建),最后调用servlet类的service方法将request和response对象写入servlet。
  • web容器只有首次访问才创建servlet
  • 浏览器获取响应信息可以类比第一条。servlet处理信息后将响应信息写入response的空对象,之后传给web容器,然后给浏览器发送响应HTTP。
  • servlet的init方法只执行一次,说明servlet在内存中只存在一个对象。
  • request在每次请求时被创建;当使用sendredirct重定向时,request对象被销毁,但使用dispatcher转发时,request并未被销毁而是传递。

区别:

  • Cookie作用于客户端,每个cookie的最大文本限制为4kb,看cookie源码时发现cookie成员变量中有name和value两个成员变量(如下),推测一个cookie只能存储一对键值对。
public class Cookie implements Cloneable, Serializable {
    private static final CookieNameValidator validation;
    private static final long serialVersionUID = 1L;
    private final String name;
    private String value;
    private int version = 0;
    private String comment;
    private String domain;
    private int maxAge = -1;
    private String path;
    private boolean secure;
    private boolean httpOnly;
    //成员方法
    }
  • Cookie是一个接口实现类,实现了Cloneable, Serializable接口,可以直接创建cookie对象,cookie构造函数只有一个有参构造,必须包含name和value两个值。
  • cookie生命周期可以通过setMaxAge方法设定,默认为浏览器关闭时销毁
  • Session作用于服务器,servlet API中并没有对session进行文本限制
  • HttpSession是一个接口,而不是接口实现类。session通过request.getSession()方法获取Session对象。
  • session默认关闭浏览器或默认时间(tomcat 30分钟)销毁,可以通过session.setMaxInactiveInterval方法设置失效时间。
  • 服务器正常关闭时,session会自动序列化到磁盘上,当服务器启动时会再从磁盘读取该session。

联系

  • 两者都是按键值对的方式进行存储,即key,value方式

Cookie

cookie如何存储数据?
因为cookie只有一个有参构造,所以可以通过构造方法存入数据。
cookie如何在一次会话中反复传递数据?
通过response.addCookie(cookie);方法将cookie通过response响应对象传给浏览器,并通过Cookie[] cookies=req.getCookies();方法获取cookie数据。
cookie如何获取指定键名的值?
可以先获取cookie数组,通过cookie.getName方法获取键名,遍历数组,找到对应键名的cookie对象,通过getValue方法即可获得指定键名的值。
补充:cookie也可以通过setter方法修改键值,但键名是final类不可修改。

Session

一般session最常用到的数据操作方法就是下面几个:

  • request.getSession() 获取session对象
  • Object getAttribute(String name);获取对应键名的键值
  • void setAttribute(String name, Object value); 设置键值对
  • void removeAttribute(String name); 移除键值对

暂时想到的就这么点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值