快速理解会话跟踪技术Cookie和Session

会话跟踪技术

  • 会话:客服端和服务端的多次请求与响应称为会话。

  • 会话跟踪:服务器需要识别多次请求是否来自同一浏览器,在同一次会话多次请求中共享数据。

    HTTP协议是无状态的,每次浏览器向服务器请求时,服务器都会视为新的请求,因此需要会话跟踪技术实现数据共享。会话跟踪技术可以分为Cookie和Session。

客户端会话跟踪技术Cookie

在这里插入图片描述

  • 数据保存在客户端,每次请求都会携带Cookie数据。如上图所示,浏览器向服务端发送第一次请求时,服务端创建一个Cookie存储username及其对应值zs,在响应中添加Cookie传送到浏览器,浏览器存储该Cookie;浏览器向服务端发送第二次请求时,携带所保存的Cookie,服务器通过getCookies()方法得到浏览器中的所有Cookie。
  • 具体实现:
		// 第一次请求发送Cookie 
		Cookie cookie = new Cookie(key, value);  // 创建Cookie
		respones.addCookie(cookie); // 添加Cookie
		// 第二次请求获取Cookie,所有cookie都以数组形式返回
		Cookie[] cookies = request.getCookies();
		// 选择一个cookie,以0为例获取
		String name = cookies[0].getName();
		String value = cookies[0].getValue();
  • Cookie原理:基于HTTP协议
    • 响应头 set-cookie 携带设置好的Cooike返回客户端,客户端保存携带的Cookie
    • 请求头 cookie 携带客户端存储的Cookie发送请求
  • 存活时间:
    • 默认情况下,Cookie存储在浏览器内存中,浏览器关闭,Cookie就被销毁
    • setMaxAge(int seconds) 设置存活时间
      • 正数:Cookie写入电脑硬盘,到时间自动删除
      • 负数:默认值,浏览器关闭,Cookie被销毁
      • 0:删除对应Cookie

服务端会话跟踪技术Session

一次会话多次请求间,怎么保证服务器获取的是同一个Session?

  • 数据保存在服务端。如上图所示,浏览器向服务器发送第一次请求时,服务器通过session的setAttribute()方法保存键值对;第二次发送请求时,由于是同一会话,服务器取得的和第一次相同的session,通过getAttribute()方法得到对应键值对。两次请求服务端是怎么确定是同一会话?因为第一次请求时,服务端将session的id保存为Cookie传送到浏览器,浏览器保存这次会话的session id,第二次请求时,携带第一次请求的session id,服务端通过session id得到与第一次相同的session,保证了两次请求获取的是同一个session。
  • 基本使用:
		// 获取Session
		HttpSession session = request.getSession();
		// 设置session
		session.setAttribute(key, value);
		// 得到session
		session.getAttribute(key);
		// 删除session
		session.removeAttribute(key);
  • Session原理:

    • 基于Cookie
    • 如何保证一次会话多次请求是同一个Session?
      Session id(JSESSIONID)被存储为Cookie保存在客户端,下一次请求根据携带的Cookie中的JSESSIONID查找对应Session。
  • 使用细节:

    • Session钝化、活化
      • 钝化:服务器正常关闭后,Tomcat会自动将数据写入硬盘的文件中
      • 活化:再次启动服务器后,从文件中加载数据到Session中
        (咱理解成三体人脱水、浸泡吧)
    • Session销毁
      • 默认30分钟销毁
      • session. Invalidate(); 自己销毁
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值