Java会话技术之 —— cookie与session
前言
说到cookie与session,想必大家都不陌生,写过单机模式下的登录业务逻辑的应该多少都会接触到cookie与session,对于cookie和session,很多同学第一反应就是cookie是存储再客户端浏览器的,而session是放在服务端的
对于网上一大堆的关于对比cookie与session技术的,对于面试来讲,临时突击加以记忆还是可以的,但说到具体的使用以及原理,还是有必要对其做一些深入的理解和探讨
首先我们通过一个具体的小案例来看看cookie与session的由来
业务场景
假如在单机模式下,系统需要先进行登录,然后才能访问其他的资源(接口)
1、环境准备
快速搭建一个springboot工程,提供两个接口,登录接口和获取用户信息接口
@RestController
public class LoginController {@GetMapping("/login")public String login(HttpSession session,HttpServletRequest request,HttpServletResponse response,String username, String password) {if(username.equals("admin") && password.equals("123456")){session.setAttribute("login_info",username);return "login success:" + username;}return "login fail:" + username;}@GetMapping("/info")public String getLoginInfo(HttpSession session,HttpServletRequest request,HttpServletResponse response) {return "info:" + session.getAttribute("login_info");}}
首先调第一个登录接口:http://localhost:8081/login?username=admin&password=123456
接着调第二个获取用户信息接口:
在此,我们注意到,通过F12观察到cookie那一栏中,在登陆成功后会产生一个 :jsessionid = B8F3038B28A83185F50BEB116CB97805
而session与cookie的由来就要从这里说起
2、cookie与session产生的背景
上图是一个非常简单的客户端通过浏览器访问服务端的示意图,由于浏览器发起请求是无状态的,即请求不会直接保存客户端的会话信息,但是服务端为了安全考虑以及记录客户端请求的会话信息,于是需要一种中间介质,可理解为缓存空间,于是各自保存一下本次的会话信息,而对于双方来说,只需要一个凭证用于标识对方的身份,这个标识就是上面的JSESSIONID
对于客户端来说,保存的位置就是浏览器中看到的cookie,而服务端来说,就是session,那么对于上面的两个接口可以拆成下面两步:
- 用户登录成功后,服务端保存JESSIONID至session,同时浏览器将JESSIONID保存至cookie,这一步通过浏览器的接口请求的header信息也可以看到,可理解为,客户端登录时顺便携带了这个JESSIONID作为凭证告知服务端,这个就是双方确认身份的凭证
2、再次调用获取用户信息接口时,客户端在请求头中携带上面的JSESSIONID,服务端从session中解析这个JSESSIONID的值,解析到了,就从session中取出来,这里不管是通过断点还是浏览器的请求header都可以反映出这个信息
3、清掉cookie,再次发起调用用户信息接口时,这一次 /info接口携带新的cookie,服务端拿到这个值去session中找并不存在,因此返回了null
4、更换浏览器,在调用了登录接口之后,通过另一个浏览器访问,无法获取到用户的信息,这说明cookie具有禁止跨域的操作
5、重新启动后端服务,在浏览器没有做变更的状态下,再次访问获取用户信息接口,发现未能获取到用户的信息,说明服务端保存session信息是存在于tomcat的进程中
6、使用上述相同的工程再启动一个相同的服务,以端口区分,然后8081端口依次访问登录,获取用户信息,8082获取用户信息(同一个浏览器)
很明显,8081和8082是两个服务对应着不同的进程,8082拿着8081的JSESSIONID去请求第二个服务的用户信息肯定是请求不到结果的
从第六步的演示,我们开始思考一个问题,同一个服务部署多份的情况下(集群部署),如何才能获取到任一台服务上的资源呢?于是就产生了分布式会话技术
最后再简单总结下Cookie(Session)的技术点
- Cookie属于客户端(浏览器)技术,session属于服务端(tomcat)技术
- 各自记录JSSESIONID的值,作为双方互认的凭证,可用于登录校验中(通过header头中携带cookie的信息,服务端解析Cookie进行前置校验)
- Cookie具有不可跨域性
- 服务端的session信息的生命周期随着容器的销毁而销毁
- Cookie可以在浏览器进行修改、删除
- Cookie可以设置有效期(过期时间)
本篇通过案例演示说明了cookie与session的使用和原理,由于从cookie的原理衍生出了众多的分布式会话解决方案,但是其核心原理都是从这里出发,希望能够深入理解,本篇到此结束,最后感谢观看!
Java会话技术之 —— cookie与session相关推荐
- 会话技术(Cookie,Session)详解
概念 功能 方式 概念 一次会话中包含多次请求和响应 一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止 功能 在一次会话的范围内的多次请求间,共享数据 方式 客户端会话技术:C ...
- Java Web 七 会话技术 八 Cookie 九 Session
七 会话技术 打开浏览器,访问服务器中资源,关闭浏览器:这个过程就是会话 分类 * Cookie会话技术:浏览器会话技术* Session会话技术:服务器会话技术 作用 解决ServletContex ...
- 大数据WEB阶段(十二)会话技术、Cookie、Session及两者的区别
会话技术 – Cookie与Session及其两者的区别 (一)会话技术 一.概述 1. 一个浏览器为了实现某一个功能对服务器产生了多次请求响应.从第一个请求开始访问服务器,会话开始,到最后一个页面访 ...
- JAVAWEB开发之JSP、EL、及会话技术(Cookie和Session)的使用详解
Servlet的缺点 开发人员要十分熟悉JAVA 不利于页面调试和维护(修改,重新编译) 很难利用网页设计工具进行页面设计(HTML内容导入到servlet中,用PrintWriter的对象进行输出) ...
- Flask的会话技术:cookie、session以及session持久化问题
文章目录 一.会话技术 1.介绍 2.详细过程 二.Cookie 1.Cookie介绍 2.Cookie登陆使用 三.Session 1.Session介绍 2.Session登陆使用 3.Sessi ...
- 【读书笔记】深入分析Java Web技术内幕-Cookie与Session
1. cookie a. cookie的属性项(version1)i. NAME=VALUEii. versioniii. comment--注释项iv. commentURL--服务器为此cooki ...
- java day40【会话技术:Cookie 、会话技术:Session 、JSP:入门学习】
第一章 会话技术 1. 会话:一次会话中包含多次请求和响应. * 一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止 2. 功能:在一次会话的范围内的多次请求间,共享数据 3. ...
- Java Web(三) 会话机制,Cookie和Session详解
很大一部分应该知道什么是会话机制,也能说的出几句,我也大概了解一点,但是学了之后几天不用,立马忘的一干二净,原因可能是没能好好理解这两种会话机制,所以会一直遗忘,一直重新回过头来学习它,今天好好把他总 ...
- Servlet第五篇【介绍会话技术、Cookie的API、详解、应用】
2019独角兽企业重金招聘Python工程师标准>>> 什么是会话技术 基本概念: 指用户开一个浏览器,访问一个网站,只要不关闭该浏览器,不管该用户点击多少个超链接,访问多少资源,直 ...
最新文章
- java的static关键字
- JS函数的定义与调用方法
- linux I/O--I/O多路复用--select总结(三)
- 关系数据库是如何工作的
- 计算机网络课程设计之电子邮件客户端程序设计与实现
- 如何将地址栏打开的图标隐藏_如何制作一款手机主题?这套UI主题图标教程将为你解密!...
- math java 计算_Java中的数学计算函数汇总
- 使用yum update更新文件系统时不更新内核的方法
- VB ListView控件各种操作详解
- 2022显卡、CPU天梯图
- Aviation turbofan starting model
- Zabbix企业微信告警最新版
- 直播预告|无监督学习的公平性研究——美国布兰迪斯大学助理教授刘洪甫
- bim综合建模插件 进行碰撞检查只需六步!
- RabbitMQ与Erlang的版本对应关系
- Gitee码云仓库操作步骤---忘了就来看看
- 世平信息数据安全合规检测实践论文入选中文核心期刊
- 第十周博文作业-小学生考试系统(1)
- 分支-04. 出租车计价(15)
- VHDL语言仿真激励文件testbench编写指南