【JavaWeb】Cookie和Session

目录

Cookie定义

Cookie数据的来源

Cookie数据的存储

Cookie数据的使用

使用Cookie原因

Session

Session定义

如何存储数据

Cookie和Session的区别

使用Cookie和Session简单实现登录页面


Cookie

Cookie定义

Cookie是浏览器提供持久化存储数据的机制。

Cookie数据的来源

Cookie中的数据通过服务器发送给浏览器的。

其中返回的响应中有 Set-Cookie这个部分,这就是服务器给浏览器的Cookie。

Cookie数据的存储

Cookie数据会存储在主机的硬盘中。数据根据域名来分类存放。

Cookie数据的使用

当浏览器访问之前访问过的服务器之后,就会把在本地保存的Cookie数据读取出来放到请求报文的头部中,这样当服务器收到后,就可以知道这个客户端之前已经连接过了,都和它发生了什么。

使用Cookie原因

由于HTTP协议是无状态(客户端和服务器之间的每次通信之间没有任何的关系)协议,但是这又不符合平时的情景。当用户登录后,下次再次登录就需要判断用户之前是否登录过。

服务器所要服务的客户端有很多,当有了Cookie后,不同的客户端发送给服务器的请求有了Cookie加持后,就会让服务器少做很多重复性的工作,大大减轻了服务器的负担。


Session

Session定义

Session是服务器提供持久化存储数据的机制。

服务器收到的请求有很多,这些请求中有些是带有Cookie的请求。但是如何识别验证Cookie的,就是通过服务器存储的Session来验证的。

如何存储数据

Session的本质是类似于一个哈希表的结构。

Key:令牌ID(sessionId/token)

Value:用户信息(服务器自己设置),用户信息也是类似于哈希表的结构。

从session角度看:sessionId是服务器自己生成的一个“唯一的字符串”

从整个登录流程来看:这个sessionId叫做token

 

Cookie和Session的区别

Cookie和Session的关联就是在网页登录的时候配合使用

区别:

1、cookie是客户端的存储机制;session是服务器的存储机制。

2、cookie中存储的信息可以是多种多样的;session就是专门用来保存用户信息的。

3、cookie和浏览器是强相关的,可以不是在登录(不和session搭配)情况下单独使用;

session可以在其他地方使用,比如手机APP登录时(不和cookie搭配使用)和其他搭配使用。

4、cookie属于HTTP协议中的一部分;session和HTTP协议无关。


使用Cookie和Session简单实现登录页面

package login;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

@WebServlet("/index")
public class IndexServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        获取session,有则获取并创建对象,无则啥也不干
//        如果有cookie,则通过cookie中的sessionId来查对应的value,然后获取到session对象
        HttpSession httpSession = req.getSession(false);
        if (httpSession == null) {
            System.out.println("用户未登录!");
            resp.sendRedirect("login.html");
            return;
        }
        String userName = (String)httpSession.getAttribute("userName");
        resp.setContentType("text/html;charset=utf8");
        resp.getWriter().write("欢迎" + userName + "回来");
    }
}
package login;


import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

@WebServlet("/login")
public class LoginServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        提前把req设置成utf8,否则当用户输入的是中文会出现bug
        req.setCharacterEncoding("utf8");
        String userName = req.getParameter("userName");
        String passWord = req.getParameter("passWord");

//        验证账户和密码是否正确
//        这里用户只有 张三 123
        if (!userName.equals("张三")) {
            System.out.println("用户名错误!");
            resp.sendRedirect("login.html");
            return;
        }
        if (!passWord.equals("123")) {
            System.out.println("密码错误!");
            resp.sendRedirect("login.html");
            return;
        }

//        登陆成功
//        创建一个session
        HttpSession httpSession = req.getSession(true);
//        创建完session后同时也把cookie也创建好了
//        同时返回时把sessionId返回给浏览器
        httpSession.setAttribute("userName", userName);
        resp.sendRedirect("index");
    }

}

抓包: 


有什么错误评论区指出。希望可以帮到你。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/4739.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

这么方便吗?用ChatGPT生成Excel(详解步骤)

文章目录前言使用过 ChatGPT 的人都知道,提示占据非常重要的位置。而 Word,Excel、PPT 这办公三大件中,当属 Excel 最难搞,想要熟练掌握它,需要记住很多公式。但是使用提示就简单多了,和 ChatGPT 聊聊天就能…

【vue3】基础概念的介绍

⭐【前言】 首先,恭喜你打开了一个系统化的学习专栏,在这个vue专栏中,大家可以根据博主发布文章的时间顺序进行一个学习。博主vue专栏指南在这:vue专栏的学习指南 🥳博主:初映CY的前说(前端领域) &#x1f…

【音视频】zlmediakit总结一

推拉流理论 推流:将直播的内容推送至服务器的过程。 拉流:指服务器已有直播内容,用指定地址进行拉取的过程。 拉流,即是指服务器里面有流媒体视频文件; 但zlmediakit里也有个广义的拉流概念如下。对于用户而言&#xf…

面试官灵魂拷问[二]:SQL 语句中 where 条件后写上 1=1 是什么意思?

面试官灵魂拷问系列又来更新啦! “SQL 语句中 where 条件后写上 11 是什么意思?” 这玩意就跟很多新语言支持尾部逗号的原理一样的。 比如 Kotlin 支持数组写成 [1, 2, 3, 4, ] ,注意4后边那个逗号,为什么呢?因为当你增加一个项…

医院LIS系统源码,云LIS系统源码,独立实验室LIS源码

实验室云LIS系统源码 LIS系统源码 LIS源码 基于B/S架构的实验室管理系统云LIS,整个系统的运行基于WEB层面,只需要在对应的工作台安装一个浏览器软件有外网即可访问。 私信了解更多源码内容! 技术架构:Asp.NET CORE 3.1 MVC SQ…

MySQL表设计思路(一对多、多对多...)

要开始单独负责需求了,捋一捋表设计的思路。 文章目录一、MySQL中的数据类型二、一对一的关系设计二、一对多的关系设计三、多对多的关系设计四、经验总结一、MySQL中的数据类型 字符串类型 varchar:即variable char ,可边长度的字符串&#…

Tomcat启动JSP项目,搞起来了

虽然有点复古,但是还是有很多小伙伴在使用的,小编来一篇保姆级教程 1、用idea打开jsp项目 2、添加tomcat配置 3、点击后会出现配置框,这里画框的地方都选上,版本选择1.8,其他的信息内容默认后,点击确认 4、点击…

FITC-PEG-Biotin,荧光素-聚乙二醇-生物素的相关检测

FITC-PEG-Biotin 荧光素聚乙二醇生物素 英文名称:Fluorescein (polyethylene glycol) Biotin 中文名称:荧光素聚乙二醇生物素 激光/发射波长:515nm~520 nm 分子量:2000、3400、5000其他分子量可制定 溶剂&#xff…

【C++】异常

文章目录C传统处理错误方式C异常概念异常使用1.异常的抛出和捕获2.异常的重新抛出异常安全异常规范自定义异常体系C标准库的异常体系异常的优缺点C传统处理错误方式 C语言传统的错误处理机制: 1. 终止程序,如assert,缺陷:用户难以…

nodejs+vue文旅门户信息网站 elementui旅游项目推荐系统 景点门票预订网站vscode

在社会快速发展的影响下,服务行业继续发展,随着旅游的人数不断增加,使哈尔滨旅游项目推荐平台的管理和运营比过去十年更加信息化,依照这一现实为基础,设计一个快捷而又方便的网上哈尔滨旅游项目推荐平台是一项十分重要…

day73【代码随想录】二刷链表

文章目录前言一、环形链表||(力扣142)二、寻找重复数(力扣287)三、缺失的第一个正数(力扣41)每日一题day73:等差子数组(力扣1630)前言 1、等差子数组 2、寻找重复数 3、…

ThreeJS-纹理(十)

关键代码: const textureLoader new THREE.TextureLoader(); //纹理加载器加载图片 const docColorLoader textureLoader.load(static/1.webp) // let color new THREE.Color(Math.random(), Math.random(), Math.random()); const cubeMaterial new THREE.Mesh…

法规标准-GB/T 39901标准解读(2021版)

GB/T 39901是做什么的? GB/T 39901全名为乘用车自动紧急制动系统(AEBS)性能要求及试验方法,其中主要对AEBS的功能要求、性能要求及测试要求进行介绍 一般要求 1.安装有自动紧急制动系统的车辆应安装符合GB 21670-2008要求的防抱制动系统 2.AEBS的电磁…

近世代数 笔记和题型连载 第七章(阿贝尔群和循环群)

文章目录基础概念1.阿贝尔群2.循环群3.有限循环群4.元素的阶5.无限循环群相关题型1.判断一个代数系统的代数结构2.判定一个群是否是循环群3.判定一个群是否是循环群4.循环群的生成元有关问题5.判定元素的阶6.判定元素的阶7.判定元素的阶8.求给定循环群的所有子群9.求给定循环群…

七. MySQL 其它优化相关

目录一. 数据库问题排查流程二. 表连接驱动表与被驱动表Nested Loop Join 与小表驱动大表JoinBuffer 连接缓冲区Index Nested-Loop Join 索引嵌套循环连接Batched Key Access join 批量的key访问连接Block Nested-Loop Join 缓存块嵌套循环连接三. 半连接in 与 existssemi-join…

Vue 04 - Vue模板语法

目录 介绍 Mustache 插值语法 Attribute指令语法 代码演示 运行效果 介绍 Vue.js 使用了基于 HTML 的模板语法,允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据。所有 Vue.js 的模板都是合法的 HTML,所以能被遵循规范的浏览器和 HTML 解析器解…

PCB模块化设计10——PCI-E高速PCB布局布线设计规范

目录PCB模块化设计10——PCI-E高速PCB布局布线设计规范1、PCI-E管脚定义2、PCI-E叠层和参考平面3、 PCB设计指南1、阻抗要求2、线宽线距3、长度匹配4、走线弯曲角度5、测试点、过孔、焊盘6、AC去耦电容放置方法7、金手指和连接器的注意事项8、其他的注意事项PCB模块化设计10——…

STM32学习笔记(一)基础知识

文章目录一、什么是单片机?二、STM系列单片机命名规则三、STM32F103C8T6单片机简介四、标准库与HAL库区别五、通用输入输出端口GPIO六、复位和时钟控制(RCC)七、时钟八、中断和事件九、定时器一、什么是单片机? 单片机和PC电脑相比…

SpringBoot的多环境配置详解(上)——文件配置项版

SpringBoot不同环境加载不同配置文件 - resource & profile 文章目录SpringBoot不同环境加载不同配置文件 - resource & profile1、 profile多配置文件2、 profile单配置文件3、maven的profiles策略4、spring.profiles.activeprofiles.active用法1、 profile多配置文件…

健身房训练计划—背部

杠铃屈腿硬拉(臀,大腿) 动作要领: 1,站距和肩等宽,脚尖微微外八,拉的时候把杆贴近小腿,身体成45度(头背腰成45度)。 2,发力的时候腿用力向上蹬&am…