IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 面试题--Cookie、Session、Token的区别 -> 正文阅读

[网络协议]面试题--Cookie、Session、Token的区别

1. Cookie,Session他们之间的区别?

参考掘金好文

关于cookie和session的分析:

? 先说说背景,了解什么是cookie和session,为什么需要cookie和session。

? http是无状态协议,就是说服务端对每一次请求都是无记忆的,因此服务端就不知道,这个请求的用户登录没有?,有没有访问权限?。因此cookie和session就是用来记录用户信息进行会话跟踪,从而让服务端区别是哪个用户发来的请求的。当客户端第一次请求服务端时,服务端就会生成一个cookie和session,将sessio保存在服务器中,将cookie添加到http响应报文中返回给客户端,后续客户端每次对服务端进行请求时都会带上sessionID,服务端通过sessionID区分不同用户发送的请求。

? 简单理解cookie和session就是两个用于存放用户信息的数据结构,一个保存在客户端,一个保存在服务端。cookie可以由服务端和客户端生成,session只能由客户端生成,两者配合共同完成记录会话信息的功能。

http响应报文的首部行

Set-Cookie = xxxx sessionID + cookie创建信息

两者对比:

回答角度cookiesession
存储位置保存在客户端保存在服务端
存储数据容量<= 4kb无限制,但会占用服务端内存资源,一般不存储太多
存储的时长可以长期保存关闭浏览器超过一定时间(30分钟)就会自动删除
两者的安全性保存在服务端相对更安全,不存在信息泄露风险保存在客户端,cookie可能被窃取导致信息泄露
是否占用服务端资源保存在客户端,不占用服务端资源保存在服务端,占用资源
存储的数据类型只能保存字符串类型任意类型
创建方可以由客户端发起创建,也可以由前端发起创建只能由服务端创建

如何在Java中创建和设置Cookie和Session?

  • 写入cookie --> http响应报文,set-cookie字段写入cookie数据到浏览器
    • 编写一个Controller,加入HttpServletResponse response 参数
    • new 一个Cookie,设置相关属性
    • 将cookie实例添加到response中即可
  • 读取cookie
    • 编写一个Controller,加入HttpServletRequest request 参数
    • 通过 request.getCookies() 获取所有该域名下的cookies
    • 遍历cookies通过比较cookie.getName() 查找到指定cookie
  • 同理,通过request.getSession() 可以获得HttpSession对象。
@GetMapping("/goodsList")
public void getGoodsList(HttpServletRequest request, HttpServletResponse response) {

    Cookie cookie = new Cookie("cookieName","cookieValue");
    cookie.setHttpOnly(true); // 只允许服务端修改
    cookie.setMaxAge(60*10);  // 过期时间一小时
    cookie.setValue("newValue") //重新设置cookei值
    response.addCookie(cookie);
}

@GetMapping("/goodsList")
public void getGoodsList(HttpServletRequest request, HttpServletResponse response) {
    
	//HttpSession session = request.getSession();
    //session.setAttribute("key","value");
    //session.setAttribute("key2","value2");
    Cookie[] cookies = request.getCookies(); // 获取所有cookie
    for (Cookie cookie : cookies) {
        cookie.getName(); // 查找到指定cookie
    }
}

关于cookie和session的补充

  • 做分布式集群需要对session做分布式session共享(存到redis中去),否则会导致在机器A上的session在机器B上失效。
  • 跨域时,当后端项目向浏览器写入cookie时,前端项目协议、域名、端口和后端接口的协议、域名、端口必须相同时才能写到浏览器
  • 浏览器禁用cookie-session机制,手动传递sessionID,URL重写
  • cookie无法跨域共享问题?–》token

参考>>

2. Token是什么?

另一种授权登录方案,主要用于无状态应用,非浏览器应用。。。

  • token是代表用户身份的令牌,通常客户端在登录时就发起申请由服务端进行授权签发,里面存放着一些关于用户的合法信息,用于判断请求是否合法(已登录),哪个用户发送的请求
  • 用户在登录时通过验证后获得由服务端签发的token,由服务端将用户信息加密后写入到token中,因此token中的加密信息都是合法的,可以使用JJWT依赖完成以上操作。
  • 每次请求服务端时,服务端都会对用户携带的token合法性进行验证,有效即可获得token中的信息,进而判断是哪个用户发送的请求。
  • 与浏览器隐私策略无关

核心信息:

  • token由服务端进行签发
  • 服务端可以自由写入数据到token中
  • 可以设置token的过期时间
  • token不依赖于浏览器,可以让一套API跨端共用(用在小程序,安卓应用,IOS,桌面应用)
  • JJWT可选择各种各样的加密算法,例如HS-512等安全的加密算法
  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-10-21 12:46:40  更:2021-10-21 12:48:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 4:41:54-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码