Servlet之cookie&session

会话:我们打开浏览器开始不断的访问某个项目, 直到关闭浏览器或者会话过期, 算一次会话。

cookie&session就是会话, 它们是用来共享数据的,范围是整个会话有效

cookie:属于客户端技术,基于请求头和响应头的

resp.addCookie(Cookie cookie);添加Cookie
req.getCookies();获取Cookie

cookie对象的构造:Cookie(String key,String value);
有且只有一个构造函数,且key还是final修饰的一旦创建不可更改;
常用的方法:

String getValue();获取值
String getName();获取键
void setMaxAge(int time);设置cookie存活时间, 以秒为单位

注意:

  • tomcat8以后Cookie的值可以存储中文, 但是不支持特殊字符;
    真有需求可以自己编码储存,取时自己解码,因为底层也是把这些汉字与符号编程字节进行传递的。

  • cookie大小有限制, 最大4kb, 而且每一个站点只能存储20个, 一个浏览器能保存300个

  • cookie的setMaxAge可以调整存储时间: 默认值是-1,当前会话有效, 会话消失cookie就消失
    值为正整数时,以秒为单位保存cookie 值为0时,立即删除cookie

  • setPath(“路径”) 可以调整cookie的作用范围,
    这个默认跟存cookie的时候那个servlet的路径有关系,比如你在"/user/ServletDemo1"存储cookie那么它的路径"/user",
    只要/user下的资源cookie都会被携带过去 setPath(req.getContextPath());

  • 数据较为不安全,用来保存个人的一些设置的时候才会使用, 只要牵扯到重要敏感的数据, 一般采用session来去存储;

session:为服务器端技术,域对象之一,可以在一次会话中共享数据,它是基于Cookie的
常用方法:

// 获取session对象
 HttpSession session = request.getSession();
 // 在域中添加数据
   session.setAttribute(String s,Object o);
  // 从域中获取数据 
   Object o = session.getAttribute(String s);
   // 从域中删除数据
   session.removeAttribute(String s);
   // 获取sessionid唯一值
   String id = session.getId();
   // 干死session
   session.invalidate();

注意:

  • 如果浏览器禁用Cookie,会导致session不使用,可以提示用户不要禁用cookie(非专业人员不知道怎么禁用Cookie,除非你想搞事情)
  • 面试题
  • 1,Session的销毁时机是一次会话?
  • 错: session是一次会话有效, 因为基于的Cookie, 而且默认是一次会话, session驻留在内存的时间默认30分钟; 调整JSESSIONID的Cookie存活时间, 来控制session的访问时间(不推荐!因为会提升内存压力)
  • 2,Session的默认有效期是一次会话?
  • 对: 原因cookie的默认有效期就是一次会话!
  • tomcat有活化和钝化机制:
  • 钝化:就是序列化,将内存的对象存到硬盘上;将session中的数据保存到work的.ser结尾的文件中
  • 活化:就是反序列化,将硬盘的数据保存到内存中;从work中获取后缀为" .ser "的文件读到内存中。
  • 目的是为了防止服务器重写或者关机导致session中数据丢失的问题,session放的都是跟用户个人相关的数据, 如果丢失,会造成用户感受到网站丢失数据不安全;tomcat自发具有钝化活化机制; 但是idea中无法掩饰出这个问题, 原因和这个家伙, 直接将work文件夹删掉,可以序列化但并没有反序列化文件
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值