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

Cookie介绍及使用场景

目录

  • 1 什么是Cookie?小饼干?
  • 2 Cookie的特点
  • 3 Cookie的资源消耗
  • 4 Cookie的安全性
  • 5 Cookie的应用场景
  • 6 Cookie是如何实现同根域名单点登录
    • 6.1 Cookie的作用域
    • 6.2 单点登录的实现步骤
    • 6.3 安全性考虑
  • 7 Cookie实现网站的主题设置

1 什么是Cookie?小饼干?

Cookie 是一种小型文本文件,通常由网站服务器发送到用户的浏览器,并保存在用户的计算机硬盘或内存中。它们用于存储一些特定的信息,以便服务器能够识别并记住用户的数据,如用户偏好、登录状态、购物车内容等。

2 Cookie的特点

存储位置:Cookie 存储在用户的设备上,但由服务器创建和管理。
有效期:Cookie 可以设置一个过期时间,在过期之前它们会一直保存在用户的设备上。如果没有设置过期时间,它们则成为会话 Cookie,仅在用户关闭浏览器时被删除。
作用域:Cookie 通常与特定的域名和路径相关联,这意味着只有来自相同域名和路径的请求才能访问这些 Cookie。这有助于保护用户的隐私。
传输方式:每次用户向服务器发送请求时,浏览器都会自动包含与该域名相关的 Cookie。这使得服务器能够识别并跟踪用户的会话。
大小限制:单个 Cookie 的大小通常有限制(例如 4KB),但浏览器允许每个域名存储多个 Cookie。
安全性:通过设置 HttpOnly 和 Secure 属性,Cookie 的安全性可以得到增强。HttpOnly 属性可以防止 JavaScript 访问 Cookie,从而减少 XSS 攻击的风险。Secure 属性则确保 Cookie 仅通过 HTTPS 连接传输,增加了传输过程中的安全性。

3 Cookie的资源消耗

  1. 对服务器资源影响较小,因为数据存储在客户端。
  2. 但过多的Cookie会增加客户端的存储负担和网络传输负担。

4 Cookie的安全性

  1. 黑客攻击:由于Cookie存储在用户的计算机上,它们可能面临被黑客利用进行恶意攻击的风险。例如,黑客可以通过窃取Cookie中的会话信息来冒充用户身份,进行欺诈或非法操作。
  2. 未加密状态:如果Cookie被设置为未加密状态,那么其中的敏感信息(如用户登录凭证)就可能在传输过程中被截获。这增加了数据泄露的风险。
  3. 跨站脚本攻击(XSS):攻击者可以通过注入恶意脚本来获取用户的Cookie信息。当用户访问被注入恶意脚本的网页时,这些脚本可以窃取用户的Cookie,并发送给攻击者。
    Cookie能够跟踪用户的浏览活动和个人信息,这些信息有可能被广告商、分析公司或其他第三方用于个人信息收集和定向广告。这可能导致用户隐私的泄露,从而引发用户对隐私保护的担忧。特别是第三方Cookie,它们会将用户的浏览数据传输到其他网站或广告公司,以分析用户的喜好和兴趣,进行精准推送个性化广告。虽然这能提高广告的效果,但未经用户同意的数据传输往往被视为对个人隐私的侵犯。
  4. 跨站请求伪造(CSRF):恶意网站可以利用Cookie来执行CSRF攻击。攻击者通过伪造请求,诱使用户在另一个网站上执行某些操作,从而导致用户的Cookie被发送到攻击者的网站。
  5. 会话劫持:攻击者通过获取用户的会话ID或Cookie来冒充用户身份。一旦攻击者获得有效的会话ID或Cookie,就可以在不需要用户名和密码的情况下访问用户的账户。

5 Cookie的应用场景

  1. 适用于简单的用户偏好存储。
  2. 如存储用户的主题设置、浏览历史等。

6 Cookie是如何实现同根域名单点登录

Cookie在同根域名单点登录(SSO,Single Sign-On)中的实现机制主要依赖于Cookie的作用域特性以及服务器端的验证逻辑。以下是具体的实现步骤和原理:

6.1 Cookie的作用域

Domain属性:Cookie的Domain属性决定了Cookie可以被哪些域名访问。如果将Cookie的Domain属性设置为当前域的父域(或主域名),则子域可以共享该Cookie。例如,将Cookie的Domain属性设置为“.my.com”,则“a.my.com”、“b.my.com”等子域都可以访问该Cookie。
Path属性:Cookie的Path属性决定了Cookie可以被哪些路径访问。通常,将Cookie的Path属性设置为根路径(“/”)可以使该Cookie在整个域名下都可访问。

6.2 单点登录的实现步骤

用户登录:用户首先在一个应用系统中进行登录操作。该应用系统作为SSO的认证中心,负责验证用户的身份。
设置Cookie:用户登录成功后,认证中心会生成一个Token(或Session ID),并将其存储在服务器端。同时,认证中心会在用户的浏览器中设置一个Cookie,该Cookie包含Token的值,并且其Domain属性被设置为主域名,Path属性被设置为根路径。这样,所有子域的应用系统都可以访问该Cookie。
访问其他应用系统:当用户尝试访问其他应用系统时,这些系统会检查请求中是否包含有效的Cookie。由于Cookie的Domain和Path属性设置得当,这些系统可以访问到认证中心设置的Cookie。
验证Cookie:应用系统接收到请求后,会从Cookie中提取Token的值,并向认证中心发送验证请求。认证中心根据Token的值查找对应的用户信息,并验证Token的有效性。
登录状态共享:如果Token有效,则认证中心会返回验证成功的消息给应用系统。应用系统据此认为用户已经登录过,并允许用户访问受保护的资源。这样,用户就实现了在同根域下的多个应用系统之间的单点登录。

6.3 安全性考虑

HttpOnly属性:为了提高Cookie的安全性,通常建议将Cookie的HttpOnly属性设置为true。这样,Cookie就不能通过JavaScript被访问和修改,从而减少了XSS(跨站脚本攻击)的风险。
Secure属性:如果应用系统使用HTTPS协议进行通信,可以将Cookie的Secure属性设置为true。这样,Cookie就只能在HTTPS连接中被传输,从而增加了传输过程中的安全性。
Token过期时间:为了限制Token的有效期,可以在服务器端设置Token的过期时间。一旦Token过期,用户就需要重新登录才能访问受保护的资源。

7 Cookie实现网站的主题设置

使用Cookie来实现网站主题设置是一种常见的用户体验优化手段。通过Cookie,网站可以记住用户选择的主题,并在用户下次访问时自动应用该主题,从而提供个性化的浏览体验。以下是如何使用Cookie实现网站主题设置的基本

步骤:

  1. 用户选择主题
    首先,在你的网站上提供一个界面,让用户能够选择他们喜欢的主题。这可以是一个下拉菜单、一组按钮或其他用户友好的控件。当用户选择一个主题时,触发一个JavaScript函数来处理这个主题选择。

  2. 设置Cookie
    在用户选择主题后,使用JavaScript设置一个Cookie来存储这个主题选择。Cookie的名字可以是你自定义的,比如themeSetting。Cookie的值应该是用户选择的主题标识符,比如light、dark或custom。你还可以设置Cookie的过期时间,以便在用户长时间不访问网站后仍然记住他们的选择。

  3. 读取Cookie并应用主题
    当用户再次访问你的网站时,你需要在页面加载时检查是否存在名为themeSetting的Cookie。如果存在,就读取它的值,并根据这个值应用相应的主题样式。这通常涉及到动态地改变CSS文件或向标签中添加特定的

示例代码
以下是一个简单的JavaScript示例,展示了如何设置和读取一个用于主题设置的Cookie:

// 设置Cookie
function setThemeCookie(theme) {
    document.cookie = "themeSetting=" + theme + "; path=/; expires=Thu, 31 Dec 2037 23:59:59 GMT; SameSite=Lax";
}

// 读取Cookie
function getThemeCookie() {
    let name = "themeSetting=";
    let ca = document.cookie.split(';');
    for(let i = 0; i < ca.length; i++) {
        let c = ca[i];
        while (c.charAt(0) == ' ') c = c.substring(1);
        if (c.indexOf(name) == 0) return c.substring(name.length, c.length);
    }
    return null; // 如果没有找到Cookie,返回null
}

// 页面加载时应用主题
window.onload = function() {
    let theme = getThemeCookie();
    if (theme) {
        // 根据theme的值应用相应的主题样式
        document.body.classList.add(theme);
    } else {
        // 如果没有找到Cookie,应用默认主题
        document.body.classList.add("defaultTheme");
    }
};

在这个示例中,setThemeCookie函数用于设置主题Cookie,getThemeCookie函数用于读取主题Cookie的值。页面加载时,window.onload事件处理器会检查是否存在主题Cookie,并根据其值应用相应的主题样式。如果没有找到Cookie,则应用默认主题。注意,这个示例假设你的CSS类名与主题名称相匹配(比如.light、.dark、.defaultTheme等)。你需要根据你的网站样式表来调整这些类名。

相关文章:

  • 图片属性——位深度
  • 学习threejs,使用PointLight点光源
  • EasyExcel的简单使用
  • es-head 正则查询和标准正则查询的差异
  • 基于Dify、Ollama与DeepSeek的私有化AI知识库构建:工具作用、场景与优势分析
  • SpringCloud面试题----什么是Zuul微服务网关
  • KT142C语音芯片支持的语音文件格式什么?Mp3还是wav呢?
  • 排序算法复习——包括插入排序、希尔排序、冒泡排序、快排(包括霍尔法、挖坑法、快慢指针法)、堆排、选择排序、归并排序等 (代码采用c/c++混编)
  • VSCode运行Go程序报错:Unable to process `evaluate`: debuggee is running
  • S7-200 Smart 和 S7-200 系列 PLC 的指令系统
  • 医疗深度学习高性能加速器:架构、技术与应用
  • 解决macos安装docker后不能远程连接的问题
  • leetcode_1742 盒子中小球的最大数量
  • Brave132编译指南 MacOS篇 - 构筑开发环境(二)
  • Leetcode1287:有序数组中出现次数超过25%的元素
  • Python学习心得Pycharm的程序调试
  • Unreal5从入门到精通之在编辑器中更新 UserWidgets
  • 从零复现R1之路[3/3]:一文速览Open R1——对DeepSeek R1训练流程前两个阶段的复现(SFT和GRPO训练)
  • 音视频入门基础:RTP专题(9)——FFmpeg接收RTP流的原理和内部实现
  • 51单片机-按键
  • 巴防长称中俄可参与克什米尔恐袭事件国际调查,外交部回应
  • 李勇已任内蒙古乌兰察布市委副书记,曾在中央编办任职
  • 铁路上海站五一假期预计发送446万人次,同比增长8.4%
  • 四川一国企“80后”掌门人为报领导“知遇之恩”,盲目决策致数亿损失
  • 习近平在中共中央政治局第二十次集体学习时强调,坚持自立自强,突出应用导向,推动人工智能健康有序发展
  • 经济日报金观平:充分发挥增量政策的经济牵引力