当前位置: 首页 > news >正文

JavaScript Cookie 与 服务器生成的 Cookie 的区别与应用

JavaScript Cookie 与 服务器生成的 Cookie 的区别与应用

Cookie是一种甜点,同时也是web前端开发中一种非常常见且重要的技术,它用于在客户端服务器之间存储和传递信息。用户身份验证、会话管理,还是用户个性化设置,都离不开Cookie。常见的 Cookie 类型包括由 JavaScript 设置的 Cookie 和由 服务器 生成的 Cookie。虽然它们都叫做 Cookie,但在使用方式、安全性、生命周期等方面有着显著的区别

下面我们将深入探讨这两种 Cookie 的异同.

1. 什么是 Cookie?

Cookie 是浏览器用于存储信息的小型数据片段。当用户访问网站时,服务器可以在浏览器中设置 Cookie,浏览器也会在每次向服务器发送请求时自动携带这些 Cookie。通过 Cookie,网站可以识别用户、保持登录状态,甚至存储用户的偏好设置。

2. JavaScript Cookie 与 服务器生成的 Cookie

2.1 设置来源
  • JavaScript Cookie:由客户端的 JavaScript 代码设置。例如,开发者可以通过 document.cookie 或使用库(如 js-cookie)来操作 Cookie。
  • 服务器生成的 Cookie:由服务器通过 HTTP 响应头中的 Set-Cookie 字段设置。当浏览器从服务器接收到响应时,服务器可以通过该字段将 Cookie 信息发送给客户端。
2.2 访问方式
  • JavaScript Cookie:可以通过 JavaScript 在浏览器中访问。例如,使用 document.cookie 可以获取当前页面的所有 Cookie。通过这种方式,开发者可以方便地读取和修改 Cookie。
  • 服务器生成的 Cookie:这些 Cookie 不能直接被 JavaScript 访问,除非没有设置 HttpOnly 标记()。它们在每次请求时自动由浏览器携带到服务器,确保服务器能够验证用户身份或会话状态。

什么是 HttpOnly

当一个 Cookie 设置了 HttpOnly 标志后,它就变成了一个 仅限 HTTP 访问的 Cookie。这意味着:

  • 浏览器 会自动将 HttpOnly Cookie 随每个 HTTP 请求一起发送给服务器。
  • JavaScript 无法通过 document.cookie 来访问这个 Cookie,从而防止了跨站脚本攻击(XSS)中的恶意脚本窃取 Cookie。
2.3 存储和传递方式
  • JavaScript Cookie:存储在浏览器的 Cookie 存储区,但不会自动随着每次 HTTP 请求一起发送给服务器,除非开发者显式地将其包含在请求头中。例如,在发送 API 请求时,开发者可以手动将 Cookie 放入 Authorization 头部。
  • 服务器生成的 Cookie:存储在浏览器的 Cookie 存储区,并且会自动随每个请求发送给服务器。只要请求的 URL 与 Cookie 的 pathdomain 匹配,浏览器会自动携带 Cookie 数据,从而使服务器能够识别和处理会话信息。
2.4 安全性
  • JavaScript Cookie:由于 JavaScript 可以直接访问 Cookie,因此它们容易受到 跨站脚本(XSS) 攻击。如果网站存在安全漏洞,攻击者可能通过恶意脚本窃取 Cookie 信息。
    • 为了增强安全性,可以通过设置 Secure(仅在 HTTPS 请求中发送)和 SameSite(防止跨站请求伪造攻击)等标志来提高安全性。
    • 设置 HttpOnly 属性可以禁止 JavaScript 访问 Cookie,从而减少被 XSS 攻击的风险。
  • 服务器生成的 Cookie:通过设置 HttpOnly 标记,服务器可以阻止客户端 JavaScript 访问 Cookie,从而增强安全性。只有在 HTTPS 请求中,Secure 标记的 Cookie 才能被发送到服务器,进一步增强安全性。此外,服务器可以使用 SameSite 属性防止 CSRF 攻击。
2.5 存储容量
  • JavaScript Cookie:每个 Cookie 的大小通常限制在 4KB 内,而且同一网站所有的 Cookie 总大小也有限制。因此,JavaScript Cookie 不适合存储大量数据,只能存储一些小型信息,比如用户偏好、主题选择等。
  • 服务器生成的 Cookie:虽然同样有大小限制(通常为 4KB),但是服务器通常不会存储大量数据。服务器生成的 Cookie 一般用于存储会话标识符、用户认证令牌等小型数据。
2.6 作用范围
  • JavaScript Cookie:通过设置 pathdomain 属性,JavaScript Cookie 可以控制它的作用范围。可以通过这些属性限制 Cookie 只在特定路径或域名下有效。
  • 服务器生成的 Cookie:与 JavaScript Cookie 类似,服务器生成的 Cookie 也可以通过 pathdomain 属性来设置作用范围。例如,path=/ 表示该 Cookie 在整个网站范围内有效,而 path=/admin 则限制在特定路径下有效。
2.7 生命周期
  • JavaScript Cookie:可以通过 expiresmax-age 属性来控制 Cookie 的有效期。如果没有设置有效期,Cookie 将成为会话 Cookie,并在浏览器会话结束时删除。
  • 服务器生成的 Cookie:同样可以通过 expiresmax-age 属性来控制 Cookie 的过期时间。没有设置过期时间时,Cookie 也是会话 Cookie,浏览器关闭后会自动删除。

3. 如何选择合适的 Cookie 类型?

3.1 使用 JavaScript Cookie

JavaScript Cookie 更适合用来存储一些不敏感、非安全的数据。例如:

  • 用户界面设置(主题、语言偏好等)
  • 本地存储(例如购物车内容、表单数据)
  • 临时性的数据(如弹窗的显示状态)
3.2 使用服务器生成的 Cookie

服务器生成的 Cookie 通常用于存储敏感信息,特别是在涉及身份验证和会话管理时。例如:

  • 用户身份认证(如登录令牌)
  • 会话管理(如用户登录状态)
  • 安全性要求较高的设置(如 HttpOnlySecure

4. 总结

JavaScript Cookie 与服务器生成的 Cookie 在工作方式、存储和访问安全性上有着显著的区别。JavaScript Cookie 数据不会自动随着每次 HTTP 请求一起发送给服务器;而服务器生成的 Cookie 更安全,适用于身份认证、会话管理等敏感信息的存储。

相关文章:

JavaScript Cookie 与 服务器生成的 Cookie 的区别与应用

JavaScript Cookie 与 服务器生成的 Cookie 的区别与应用 Cookie是一种甜点,同时也是web前端开发中一种非常常见且重要的技术,它用于在客户端和服务器之间存储和传递信息。用户身份验证、会话管理,还是用户个性化设置,都离不开Coo…...

深入了解Git、GitHub、GitLab及其应用技巧

在现代软件开发中,掌握版本控制系统(VCS)是至关重要的,其中Git是最流行的分布式版本控制工具之一。本文将详细介绍Git的用途及其基本操作,并深入探讨GitLab、GitHub、和Git Desktop的使用方法,同时总结Git的…...

ctfshow(316,317,318)--XSS漏洞--反射性XSS

反射型XSS相关知识 Web316 进入界面: 审计 显示是关于反射性XSS的题目。 思路 首先想到利用XSS平台解题,看其他师傅的wp提示flag是在cookie中。 当前页面的cookie是flagyou%20are%20not%20admin%20no%20flag。 但是这里我使用XSS平台,…...

Visual Studio2022版本的下载与安装

1-首先打开微软的官网,下面就是链接 下载 Visual Studio Tools - 免费安装 Windows、Mac、Linux免费下载 Visual Studio IDE 或 VS Code。 在 Windows、Mac 上试用 Visual Studio Professional 或企业版。https://visualstudio.microsoft.com/zh-hans/downloads/?…...

nodeJS程序如何引入依赖包

在 Node.js 运行时中引入依赖包通常通过以下步骤完成: 初始化项目: 首先,你需要初始化一个 Node.js 项目。如果你还没有 package.json 文件,可以使用 npm init 命令来创建它。运行以下命令并按提示输入相关信息: npm i…...

建网站怎么建?只需几个步骤

在这个网络飞速发展的时代,越来越多的人都渴望拥有自己的网站。然而,对于大多数新手来说,如何建立自己的网站可能充满了挑战。本文将为您详细介绍建网站的关键步骤,让您能够轻松搭建自己的网站。 选择适合的建站工具 虽然市面上有…...

机器学习课程总结(个人向)

前言 通过看课件PPT整理的笔记,没有截图 由于大部分内容已经耳熟能详了,故记录比较简略,只记录了一些概念和需要记忆的地方。 里面有较多的个人观点,未必正确。如有错误,还请各位大佬指正 正文 绪论 机器学习的定…...

数据分析-43-时间序列预测之深度学习方法GRU

文章目录 1 时间序列1.1 时间序列特点1.1.1 原始信号1.1.2 趋势1.1.3 季节性和周期性1.1.4 噪声1.2 时间序列预测方法1.2.1 统计方法1.2.2 机器学习方法1.2.3 深度学习方法2 GRU2.1 模拟数据2.2 数据归一化2.3 生成滞后特征2.4 切分训练集和测试集2.5 模型训练2.6 模型预测3 参…...

Pandas | 数据分析时将特定列转换为数字类型 float64 或 int64的方法

类型转换 传统方法astype使用value_counts统计通过apply替换并使用astype转换 pd.to_numericx对连续变量进行转化⭐参数:返回值:示例代码: isnull不会检查空字符串 数据准备 有一组数据信息如下,其中主要将TotalCharges、MonthlyC…...

Elasticsearch的自定义查询方法到底是啥?

Elasticsearch主要的目的就是查询,默认提供的查询方法是查询全部,不满足我们的需求,可以定义查询方法 自定义查询方法 单条件查询 我们查询的需求:从title中查询所有包含"鼠标"这个分词的商品数据 SELECT * FROM it…...

Jenkins找不到maven构建项目

有的可能没有出现maven这个选项 解决办法:需要安装Maven项目插件 输入​Maven Integration plugin​...

怎么更换IP地址 改变IP归属地的三种方法

要更换自己的IP地址,您可以按照以下步骤进行操作: 1. 了解IP地址类型:首先,您需要了解您当前使用的IP地址类型。IP地址分为静态IP和动态IP两种。静态IP地址是固定的,使用第三方软件比如S深度IP转换器;而使用…...

C#-异步查询示例

文章速览 CancellationTokenSource 概述代码示例 坚持记录实属不易,希望友善多金的码友能够随手点一个赞。 共同创建氛围更加良好的开发者社区! 谢谢~ CancellationTokenSource 概述 使用System.Threading下的CancellationTokenSource类,进…...

设计模式之适配器模式(从多个MQ消息体中,抽取指定字段值场景)

前言 工作到3年左右很大一部分程序员都想提升自己的技术栈,开始尝试去阅读一些源码,例如Spring、Mybaits、Dubbo等,但读着读着发现越来越难懂,一会从这过来一会跑到那去。甚至怀疑自己技术太差,慢慢也就不愿意再触碰这…...

vue+exceljs前端下载、导出xlsx文件

首先安装插件 npm install exceljs file-saver第一种 简单导出 //页面引入 import ExcelJS from exceljs; import {saveAs} from file-saver; export default {methods: { /** 导出操作 */async handleExportFun() {let that this// 获取当前年月日 用户下载xlsx的文件名称设…...

算法定制LiteAIServer摄像机实时接入分析平台烟火检测算法的主要功能

在现代社会,随着人工智能技术的飞速发展,智能监控系统在公共安全领域的应用日益广泛。其中,烟火检测作为预防火灾的重要手段,其准确性和实时性对于减少火灾损失、保障人民生命财产安全具有重要意义。而算法定制LiteAIServer烟火检…...

用 Python 从零开始创建神经网络(二)

用 Python 从零开始创建神经网络(二) 引言1. Tensors, Arrays and Vectors:2. Dot Product and Vector Additiona. Dot Product (点积)b. Vector Addition (向量加法) 3. A Single Neuron with …...

嘉吉连续第七年亮相进博会

以“新质绿动,共赢未来”为主题,嘉吉连续第七年亮相进博会舞台。嘉吉带来了超过120款产品与解决方案,展示嘉吉在农业、食品、金融和工业等领域以客户为中心的创新成果。这些产品融合了嘉吉在相关领域的前瞻性思考,以及对本土市场的…...

设计模式之单列模式(7种单例模式案例,Effective Java 作者推荐枚举单例模式)

前言 在设计模式中按照不同的处理方式共包含三大类;创建型模式、结构型模式和行为模式,其中创建型模式目前已经介绍了其中的四个;工厂方法模式、抽象工厂模式、生成器模式和原型模式,除此之外还有最后一个单例模式。 单列模式介绍…...

多个服务器共享同一个Redis Cluster集群,并且可以使用Redisson分布式锁

Redisson 是一个高级的 Redis 客户端,它支持多种分布式 Java 对象和服务。其中之一就是分布式锁(RLock),它可以跨多个应用实例在多个服务器上使用同一个 Redis 集群,为这些实例提供锁服务。 当你在不同服务器上运行的…...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

centos 7 部署awstats 网站访问检测

一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...

基于Java+MySQL实现(GUI)客户管理系统

客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...

云原生安全实战:API网关Kong的鉴权与限流详解

🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关(API Gateway) API网关是微服务架构中的核心组件,负责统一管理所有API的流量入口。它像一座…...

虚拟电厂发展三大趋势:市场化、技术主导、车网互联

市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦&#xff0…...