session 和 cookie

session
  • 浏览器与服务器之间的一次会话,包含多个请求;

  • 是服务器为每一位用户在服务器端开辟的一块空间(用来存储用户相关的数据信息):

    • 包含sessionId(唯一),可以根据sessionId访问到用户自身的其他数据信息;
  • 获取session: req.getSession() (对象类型为HttpSession);

  • 向session中放数据: session.setAttribute("key", value)

  • 从session中取数据: session.getAttribute("key")

  • 什么时候使用session:当每个用户拥有自己不同的数据时,需要使用session,例如登陆账号

  • 登陆流程:

  • session和浏览器、服务器都有关,而session存放空间在服务器端

  • 每个用户也拥有自己的session,服务器根据用户sessionId来区分,那么服务器是如何知道不同客户的sessionId?

    • 客户端和浏览器第一次建立请求,服务器为该客户创建一个session对象,并且指派一个sessionId。当服务器响应客户端时,会将这个sessionId以cookie的方式,通过response写入浏览器的内存中。当该客户再次发起请求时,会将该sessionId传递给服务器。服务器根据接收到的sessionId查找该客户对应的session
  • session的建立时机:设置req.getSession(true)时(一般情况下在请求servlet/jsp时);

  • 浏览器关闭时,session不会被删除(因为session存储在服务器端),但不能找到原来的session(因为本地sessionId存储在浏览器的内存中,但浏览器关闭意味着进程已经结束);

  • session何时被删除

    • 时间超时:设置session失效时间:session.setMaxInactiveInterval(int) 单位为秒,从最后一次请求访问后开始计时;
    • 手动调用:session.invalidate()使session失效;
    • 服务器关闭或停止;
  • 从session中移除值: session.removeAttribute(key)


  • 服务器端将文本信息存储在客户端,可以存放在磁盘上,cookie是以key-value形式存放的,都是String类型

  • 服务器如何将数据写入客户端?

//新建cookie对象
Cookie ck = new Cookie("name", "char");

//设置cookie有效时间
ck.setMaxAge(10 * 60); //单位为秒 

//通过response对象,将cookie写入客户端
 resp.addCookie(ck);

  当有效时间小于0时,cookie不存储到磁盘中,但是会存储在浏览器内存中,关闭浏览器,cookie则会失效;
  当有效时间为0时,cookie会回写到客户端,但是会立即被删除,下一次请求将不会被携带;
  当有效时间大于0时,cookie会被存储到磁盘,当浏览器关闭,下一次请求仍然会被携带到服务器;
  默认情况下,cookie存储在内存中;

  • 取出cookie中的值:

    • cookie的name和value会随着请求到服务器端,而其他信息会有浏览器管理(例如MaxAge)
  • cookie的应用:减轻服务器存储 数据的压力;读取本地信息效率优于读取服务器端信息;

  • 保证cookie的安全性:为cookie进行加密;

  • cookie没有修改;如果想修改某个cookie的值,只需要新建一个和key相同的cookie,即可将原来的cookie覆盖。cookie也不需要删除,到期后,浏览器会自动删除;

  • cookie是带有domain的,每个web应用只能读取自己的cookie。cookie和浏览器有关,不同浏览器的cookie是不能共享的;

  • cookie由浏览器管理,浏览器可以禁用cookie;

  • cookie中文处理:

    • 在存入cookie时,调用URLEncoder.encode(value, "utf-8"),来对中文进行编码
    • 再读取cookie时,调用URLDecoder.decode(ck.getValue(), "utf-8"),来对中文进行解码

cookie和session比较
  • cookie

    • 可以存放大量的文本数据
    • 安全性较低,存储效率高,执行效率低
  • session

    • 存放的数据量较小
    • 安全性较高,效率较高(可以存储对象,而cookie中只能存储字符串,需要转换对象)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值