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——登录状态管理 -> 正文阅读

[系统运维]Cookie和Session——登录状态管理

为什么要有Cookie和Session

HTTP协议被称为无状态(Stateless)协议

我们拿到请求的时候,不知道是谁发送的请求;但是在需求中,我们我们又需要知道是谁发送的信息,是在什么场景下发的,这很矛盾,所以引入了Cookie和Session

什么是Cookie和Session

Cookie,会员卡就是Cookie, 由服务器传递给客户端,并要求客户端有保存会员卡的职责+再次请求时携带会员卡的职责

Session维护在服务器端的档案信息
会员卡号(10086)被称为 Sesson-id

Web场景中
Cookie是属于HTTP协议标准规定的内容
Session并没有硬性规定,有各种方案实现。只要是类似概念即可
在这里插入图片描述

注意:
删了浏览器cookie,虽然服务器的session还在,但由于没有cookie,取不到,认为没登录
改了浏览器cookie,由于对应的session-id无法找到对应的session,认为没登录
重启服务器(session信息目前在内存中,所以没了),虽然浏览器的cookie还在,但找不到对应的session,认为没登录

开发者工具:
网络面板,可以查看请求中的Cookie头以及响应中的Set-Cookie头
应用面板,可以查看当前有的Cookie信息,也可以新增、修改、删除Cookie信息

浏览器有保存cookie的职责
浏览器有在以后请求时携带cookie的职责
携带同一个域下的所有cookie

在这里插入图片描述

Session管理对象,类似key-value
Map<Session-ld, HttpSession对象>一开始的时候的空的

HttpSession对象,类似key-value 
Map<String, Object>

req.getSession(boolean create);

取出本次请求对应的Session对象。

如果session-id可以取出对象,则create的值不重要。
如果session-id没法取出对象,则
create = true,会创建新的session对象,并返回
create = false,直接返回false

HttpSession session = req.getSession(false);

1.从请求中读取cookie值,其中name是JSESSIONID的值
在这里插入图片描述

HttpSession session = req.getSession(true);

可能cookie中没有session-id
也可能session-id找不到对应的HttpSession对象,HttpSession对象是null
由于create == true
创建Session对象

  1. 生成一个随机值作为sid : xxxyyyzzz
  2. 创建一个 HttpSession对象(key-value
  3. sid => HttpSession对象,添加到Session管理对象中
  4. 设置响应头:Set-Cookie: JSESSIONID=xxxyyyzz
    返回HttpSession对象

由于Tomcat运行过程中,Session管理对象有且仅有一份
在这里插入图片描述

实现注销(退出登录)

在这里插入图片描述
删除 xxxyyyzzz 可以快速达到效果,但是代价比较大
只删除 currentUser 影响最小

Cookie和Session的关系

本质上是两个独立的机制,只是90%场景下是配合使用的,但完全做到没有Session单独使用Cookie,以及没有Cookie,单独使用Session

Cookie:用来在浏览器和服务器之间交换信息的载体、机制
Servlet 中如何脱离Session使用Cookie:

  • 从请求中获取Cookie
    Cookie[] req.getCookies(); =>本次携带的所有Cookie信息
  • 向响应中种(设置)Cookie
    resp.addCookie(Cookie cookie)

简要了解cookie 里的其他属性

  • Domain :决定了Cookie所在的域,浏览器在发送请求时,只会携带同域下的所有cookie请求腾讯网,不应该携带百度的cookie
    www.qq.com和news.qq.com都是qq.com大域,又可以视为不同的子域,通过设置domain,在不同子域下生效

  • Path是根(/)所有路径都携带,而已可以通过设置路径,决定哪些路径下发送

  • Expires过期时间:没有cookie都可以设置过期时间
    超过过期时间的cookie,应该被浏览器删除,也不应该携带该cookie 了
    【现象:登录之后,一段时间里不用重复登录,但超过一定时间,就需要重新登录】

  • Expries:会话(Session)是同一个词,但不是一个含义 浏览器打开期间有效。关闭浏览器之后就失效了可以设置具体的时间

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-01-08 14:27:52  更:2022-01-08 14:28:53 
 
开发: 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/16 6:45:16-

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