Java 实战介绍 Cookie 和 Session 的区别

这篇具有很好参考价值的文章主要介绍了Java 实战介绍 Cookie 和 Session 的区别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

HTTP 是一种不保存状态的协议,即无状态协议,HTTP 协议不会保存请求和响应之间的通信状态,协议对于发送过的请求和响应都不会做持久化处理。

无状态协议减少了对服务压力,如果一个服务器需要处理百万级用户的请求状态,对服务器的压力无疑的是巨大的。

无状态的 HTTP 由于其简单和易用性,应用比较管广泛。而且早期的 Web 服务对于状态的需求也很低,所以应用场景也比较广泛。

随着 Web 的不断发展,越来越多的服务需要记录用户的登录状态,比如购物、聊天、论坛服务,请求都是无状态的服务,服务器就无法识别是 HTTP 请求的用户信息,所以就需要一种技术保存用户的状态,也就 Cookie 技术,有了 Cookie 的 HTTP 协议通信,就能保存状态了。

Cookie

在无状态协议不受影响的基础上,通过引入 Cookie 来记录状态,这样既不会影响原有的功能,也可以解决请求状态问题。Cookie 是当你浏览网页,通过服务器记录你的用户名,密码等网页信息。

Cookie 是由服务端创建,客户端向服务发送请求后,服务端通过响应报文的Set-Cookie 字段将 Cookie 信息返回给客户端,客户端自动保存 Cookie。Cookie 会标记来源、有效期、路径等信息。客户端再次请求该服务端时,会自动将 Cookie 添加到请求报文中(Request Header),服务端就能通过传递的 Cookie 识别客户端的信息。

1.没有 Cookie 信息的请求

2.再次(有了Cookie信息后)发送请求

Cookie 简单实践

使用 Spring Boot 创建简单的 Controller,当客户端传递的参数 a 有值时,服务端才添加 Cookie:

@GetMapping("/cookie")
@ResponseBody
public String cookie(String a, HttpServletRequest request, HttpServletResponse response) {
    if (a != null) {
        Cookie cookie = new Cookie("name",a);
        response.addCookie(cookie);
    }
    return "ok";
}

首先使用 Chrome 浏览器发送请求http://localhost:8080/cookie:

返回结果没有 Cookie。

再发送带有 a 参数的请求http://localhost:8080/cookie?a=jeremy:

返回 Cookie 都存在 Set-Cookie 字段中,客户端会自动保存 Cookie。

再次发送相同的请求http://localhost:8080/cookie?a=jeremy:

请求会将客户端的 Cooike 自动添加到请求报文中,此时服务端也能接收到 Cookie信息:

Session

Session 是服务端保存用户状态的一种机制,当用户访问网站时,服务端会为每个用户创建唯一个会话标识,并根据用户登录请求创建和存储会话信息,客户端再次请求时,就能从服务端获取会话信息了。

Session 简单实践

在 Java 中的 Servlet 提供 HttpSession 的接口来操作会话信息,只要有以下几个方法:

  • public HttpSession getSession() 获取会话信息,如果不存在就创建会话信息。
  • public String getId() 获取唯一的会话 id。
  • public void invalidate() 将会话信息失效,一般注销时候使用。

HttpSession 接口通过 getAttribute() 和 setAttribute() 来获取和设置会话信息,
下面创建两个方法,session() 方法获取会话判断用户是否登录,login() 方法添加会话信息。

@GetMapping("/session")
@ResponseBody
public String session(HttpServletRequest request, HttpServletResponse response) {
    HttpSession session = request.getSession();
    Boolean login =(Boolean) session.getAttribute("login");
    String loginInfo;
    if (login == null) {
        loginInfo = "未登录";
    } else {
        loginInfo = "已登录";
    }
    return "session id :" + session.getId() + ":" + loginInfo;
}

@GetMapping("/login")
@ResponseBody
public String login(HttpServletRequest request) {
    HttpSession session = request.getSession();
    session.setAttribute("login",true);
    return "ok";
}

先请求 http://localhost:8080/session,返回如下信息:

session id :F3C560208A54E3D5B465CDEBE7419817:未登录

多次发送请求,session id 是一致的,说明 session id是在会话周期之内(浏览器不关闭)都是不变的。

然后请求登录接口 http://localhost:8080/login,设置了会话信息之后,再请求 http://localhost:8080/session:返回如下信息:

session id :F3C560208A54E3D5B465CDEBE7419817:已登录

同一个用户请求,服务端会创建唯一的会话,在请求的生命周期之内,会话 id 一直不改变。session 会话由服务端添加后,后续请求就能获取到会话信息,会话信息只存储在服务端。

Cookie 和 Session 的区别

Cookie 是存储在客户端上小型文本,是由服务端创建,然后通过响应报文的 Set-Cookie 字段返回给客户端。客户端每次请求服务端吗,浏览器都会将 Cookie 信息发送给服务端,服务端根据 Cookie 来识别用户的会话信息。Cookie 有如下几个特点:

  • 存储在客户端
  • 可以被客户端修改和删除
  • 数据比较小,例如用户基本信息、购物信息
  • 可以设置过期时间。

Session 是服务端存储会话信息,当客户端请求服务端时,服务端会被每个用户创建一个唯一的会话(Session id)标识,并在服务端设置和存储会话信息,并在后续的请求,可以获取到会话信息,主要有如下特点:

  • 存储在服务端,客户端无法修改和删除
  • 数据比较大,比如用户的信息,登录记录。
  • 通常依赖 Cookie 和客户端进行数据交换。

Cookie 和 Session 的主要区别:

  • 储存位置:Cookie 存储在客户端,Session 存储在服务端上。
  • 数据大小:Cookie 通常比较小,Session 通常存储较大的数据。
  • 安全性:Cookie 可以通过 js 设置和修改,也可能通过抓包工具修改,可以轻易的被修改,Cookie 安全性差,很多浏览器也禁用了 Cookie,Cookie 使用也不多。Session 的设置和修改都在服务端,安全性相对 Cookie 高很多。

在实际的使用场景上,Cookie 和 Session 也会结合使用,服务端使用Session记录用户的会话信息,而将会话信息存储在 Cookie 中,这样可以减少服务端的压力。文章来源地址https://www.toymoban.com/news/detail-480753.html

到了这里,关于Java 实战介绍 Cookie 和 Session 的区别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【HTTP】URL结构、HTTP请求和响应的报文格式、HTTP请求的方法、常见的状态码、GET和POST有什么区别、Cookie、Session等重点知识汇总

    目录 URL格式 HTTP请求和响应报文的字段? HTTP请求方法 常见的状态码 GET 和 POST 的区别 Cookie 和 Session ? :是用来分割URL的主体部分(通常是路径)和查询字符串(query string)查询字符串是一组键值对的参数 query string :是键值对的结构,分割键值对,=分割键和值 Content-Type

    2024年02月07日
    浏览(51)
  • Java【HTTP】什么是 Cookie 和 Session? 如何理解这两种机制的区别和作用?

    各位读者好, 我是小陈, 这是我的个人主页, 希望我的专栏能够帮助到你: 📕 JavaSE基础: 基础语法, 类和对象, 封装继承多态, 接口, 综合小练习图书管理系统等 📗 Java数据结构: 顺序表, 链表, 堆, 二叉树, 二叉搜索树, 哈希表等 📘 JavaEE初阶: 多线程, 网络编程, TCP/IP协议, HTTP协议

    2024年02月11日
    浏览(41)
  • Javaweb | 状态管理:Session、Cookie

    💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! 问题引入 HTTP协议是无转态的,不能保存提交的信息 如果用户发来一个新的请求,服务器无法知道它是否与上次的请求联系 对于那些需要多次提交数据才能完成的web操作,比如登录,就难以完成 概念 将浏览器与web服务

    2024年02月05日
    浏览(48)
  • cookie、session、token的区别

    HTTP无状态 当登录一个大部分网站的时候,第一次登录之后,之后的很长一段时间当我们再次访问网站的时候都不需要我们再次登录了,这个是怎么回事呢? 我们都知道http是无状态的,什么是无状态:关闭网页,再次访问服务器,服务器是不能知道是你在访问。所以就是靠接

    2024年02月08日
    浏览(33)
  • session、cookie、token的区别?

    今天就来理一理session、cookie、token这三者之间的关系! 我们都知道 HTTP 协议是无状态的,所谓的无状态就是客户端每次想要与服务端通信,都必须重新与服务端链接,意味着请求一次客户端和服务端就连接一次,下一次请求与上一次请求是没有关系的。 这种无状态的方式就

    2023年04月12日
    浏览(42)
  • Session与Cookie的区别(五)

    小明的故事说完了,该来把上面这一段变成网络的实际案例了。其实在网络世界中问题也是一样的。 前面已经提到过我们会把状态存在 Cookie 里面,让 Request 之间能够变得有关联。 假设我们今天要来做一个会员系统,那我要怎么知道这个 Request 代表的是哪一个会员? 最直觉

    2024年02月13日
    浏览(35)
  • Session与Cookie的区别(三)

    让我们先从比喻回到网络世界里,HTTP 是无状态的,所以每一个 Request 都是不相关的,就像是对小明来说每一位客人都是新的客人一样,他根本不知道谁是谁。 既然你没办法把他们关联,就代表状态这件事情也不存在。 把左边换成顾客,右边换成小明也依然成立。多一个得是

    2024年02月14日
    浏览(36)
  • session、cookie、webstorage的区别

    Cookie实际上是一小段的文本信息,是服务器发送到用户浏览器并保存在本地的一小块数据。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端会把Cookie保存起来。当浏览器下次向同一服务器再发起请求时,浏览器把请求

    2024年02月10日
    浏览(44)
  • cookie、session和token的区别

    作用:三者的作用是在浏览器上保存用户的登录态,其实就是实现用户在网页上登录过一次后,一段时间内再次访问不需要重新登录,会实现自动登录的一个效果。 cookie: 是客户端用来存放数据的一个容器,大小约为4k,是服务器发送到用户浏览器并保存在本地的一小块数据

    2024年02月14日
    浏览(46)
  • Token,Cookie和Session三者的区别

    在做各种接口测试时,经常会碰到请求参数为token的类型,但是可能大部分测试人员对token,cookie,session的区别还是一知半解。 cookie是服务器端生成发送给客户端在客户端保存的 session是放在服务器端来和客户端的cookie做匹配的 Token是为了解决客户端频繁向服务端请求数据,服

    2024年02月04日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包