Cookie和session

目录

1. 会话技术概念

2. Cookie技术

3. Session技术

4.  cookie和session的优劣

1. 会话技术概念

识别客户端的状态,帮助服务器记住/区分客户端状态。

  会话: 浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止,客户端和服务器端通信/连接的建立,称为一次会话。 一次会话, 会有多个请求和响应。

  会话技术: 记录会话中客户端的状态和数据。在一次会话的范围内的多次请求间共享数据。

  范围:request > 会话技术 > ServletContext

方式:

  •   客户端会话技术: Cookie

  数据存储在客户端本地,减少服务器端的存储的压力,安全性不好,客户端可以清除cookie。

  •   服务器端会话技术: Session

  将数据存储到服务器端,安全性相对好,增加服务器的压力。

2. Cookie技术

将用户的数据存储到客户端的技术, 只支持 String 类型的数据。

  • 创建,绑定数据:Cookie cookie = new Cookie("username","zhangsan");
  • 发送:response.addCookie(cookie);
  • 获取:Cookie[] cookies = request.getCookies();
  • 存储:服务器通过 response 头(set-cookie) 将数据发送给客户端

cookie的生命周期: 一次会话(会话结束浏览器关闭后, cookie数据被销毁)
修改cookie的持久化时间:setMaxAge(int)

  • 携带: 只要向服务器发送请求,客户端有服务器对应的cookie,就会自动由 request 头(cookie) 发送给服务器

setPath(uri):设置携带路径(cookie的获取范围),默认的携带路径是同一个目录中的所有资源
共享问题:可将path设置为 “ / ”

3. Session技术

Session技术是将数据存储在服务器端的技术,会为每个客户端都创建一块内存空间存储客户的数据,客户端需要每次都携带一个标识ID,去服务器中寻找属于自己的内存空间。
Session的实现是基于Cookie,Session需要借助于Cookie存储客户的唯一性标识JSESSIONID。

3.1 获得session

HttpSession session = request.getSession();
    原理: 在访问session的时候, 服务器端会查看客户端有没有携带JSESSIONID的cookie过来

  • 没有携带JSESSIONID,判断客户端是第一次访问session,创建一个session对象,每一个session对象都会有一个唯一的编号 JSESSIONID,将JSESSIONID 添加到cookie中,返回给客户端保存。
  • 携带JSESSIONID,判断有没有对应的session对象,有就直接将之前的session返回。

    结论: session底层实现需要依赖于cookie

3.2 使用HttpSession对象
  •   Object getAttribute(String name)
  •   void setAttribute(String name, Object value)
  •   void removeAttribute(String name)
3.3 实现JSESSIONID持久化
  Cookie cookie = new Cookie("JSESSIONID", session.getId());
  cookie.setPath(request.getContextPath());
  cookie.setMaxAge(60 * 60 * 24);
  response.addCookie(cookie);
3.4 生命周期
  • 创建:第一次调用request.getSession()方法时
  • 销毁:会话结束,session实际是没有被销毁的

             1. 服务器非正常关闭
             2. 手动销毁 session.invalidate();
             3. 默认失效时间销毁, 默认配置在web.xml
                <session-config>
                    <session-timeout>1</session-timeout>
                </session-config>

3.5 session的钝化和活化
  1. 服务器关闭后,session对象一定是从内存中释放掉了。
  2. session数据持久化(钝化):将数据从内存保存到tomcat/work/应用/session文件。
  3. 服务器开启后(活化):session数据 从文件中还原到了内存中。

         服务器重启后, session已经不是原来的对象了, 只是数据进行了还原

4.  cookie和session的优劣势

  • cookie:存储数据在客户端,有数据大小限制,只能存储字符串类型数据,数据不安全。
  • session:存储在服务器端,可以存储任意类型、大小的数据,数据安全。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值