Cookie 中允许使用哪些字符?

2023-11-26

Cookie 名称和值中允许使用哪些字符?它们与 URL 或某些公共子集相同吗?

我问的原因是我最近遇到了一些奇怪的 cookie 行为,这些行为-以他们的名字命名,我只是想知道这是否是特定于浏览器的,或者我的代码是否有问题。


根据古老的网景cookie_spec整个NAME=VALUE字符串是:

不包括分号、逗号和空格的字符序列。

So -应该可以,而且在我这里的浏览器中似乎确实没问题;你在哪里遇到麻烦了?

由上述含义可知:

  • =包含在内是合法的,但可能存在歧义。浏览器总是首先分割名称和值=字符串中的符号,所以在实践中你可以放一个=VALUE 中包含符号,但 NAME 中不包含符号。

没有提到的是,因为 Netscape 在编写规范方面很糟糕,但似乎一直受到浏览器的支持:

  • NAME 或 VALUE 可以是空字符串

  • 如果没有=字符串中根本没有符号,浏览器将其视为具有空字符串名称的cookie,即Set-Cookie: foo是相同的Set-Cookie: =foo.

  • 当浏览器输出一个空名称的 cookie 时,它​​们会省略等号。所以Set-Cookie: =bar begets Cookie: bar.

  • 名称和值中的逗号和空格实际上似乎有效,尽管等号周围的空格被修剪

  • 控制字符(\x00 to \x1F plus \x7F) 不允许

没有提到并且浏览器完全不一致的是非 ASCII (Unicode) 字符:

  • 在 Opera 和 Google Chrome 中,它们使用 UTF-8 编码为 Cookie 标头;
  • 在 IE 中,使用机器的默认代码页(特定于区域设置且从不使用 UTF-8);
  • Firefox(和其他基于 Mozilla 的浏览器)单独使用每个 UTF-16 代码点的低字节(因此 ISO-8859-1 没问题,但其他任何内容都会被破坏);
  • Safari 简单地拒绝发送任何包含非 ASCII 字符的 cookie。

因此实际上您根本不能在 cookie 中使用非 ASCII 字符。如果您想使用 Unicode、控制代码或其他任意字节序列,cookie_spec 要求您使用您自己选择的临时编码方案并建议 URL 编码(由 JavaScript 的生成)encodeURIComponent)作为合理的选择。

按照actual标准中,已经有一些尝试将 cookie 行为编入法典,但迄今为止还没有真正反映现实世界。

  • RFC 2109是对原始 Netscape cookie_spec 进行编码和修复的尝试。在此标准中,不允许使用更多特殊字符,因为它使用RFC 2616代币(一个- is still允许),并且只有该值可以在带有其他字符的带引号的字符串中指定。没有浏览器实现过这些限制、带引号的字符串和转义的特殊处理或本规范中的新功能。

  • RFC 2965这是另一个尝试,整理了 2109 并在“版本 2 cookie”方案下添加了更多功能。也没有人实施过任何这些。该规范与早期版本具有相同的标记和引用字符串限制,并且同样是一堆废话。

  • RFC 6265是 HTML5 时代清理历史混乱的一次尝试。它仍然与现实不完全匹配,但它比早期的尝试要好得多——它至少是浏览器支持的正确子集,没有引入任何应该起作用但不起作用的语法(如前面的引用字符串) 。

在 6265 中,cookie 名称仍指定为 RFC 2616token,这意味着您可以从字母中选择加上:

!#$%&'*+-.^_`|~

在 cookie 值中,它正式禁止(由浏览器过滤的)控制字符和(不一致实现的)非 ASCII 字符。它保留了 cookie_spec 对空格、逗号和分号的禁止,此外,为了与实际实现早期 RFC 的任何可怜的白痴兼容,它还禁止反斜杠和引号,除了包裹整个值的引号(但在这种情况下,引号仍然被认为是值,而不是编码方案)。这样你就剩下了字母加上:

!#$%&'()*+-./:<=>?@[]^_`{|}~

在现实世界中,我们仍在使用原始且最差的 Netscape cookie_spec,因此使用 cookie 的代码应该准备好遇到几乎任何情况,但对于生成 cookie 的代码,建议坚持使用 RFC 6265 中的子集。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Cookie 中允许使用哪些字符? 的相关文章

  • 使用Golang登录私有站点并提取信息

    我尝试使用 golang 登录网站的私人区域并提取一些信息 但我似乎不太正确 我设法获取登录页面以获取 csrf 令牌 然后将 csrf 令牌与登录信息一起发布到登录页面 然后我就可以正常登录了 如果我在此时停止 我可以看到我被重定向的页面
  • Asp.Net Core 3.1 Cookie 未附加 Razor 页面 C#

    Cookie 没有使用以下代码附加到页面 我尝试将 IsEssential 添加到选项中 但它不起作用 使用 Asp Net Core 3 1 Razor 页面 这是我的大部分startup cs 和附加的cookie 代码 启动 cs p
  • 无法登录 Magento 管理员

    我在登录我们的一个临时站点上的 Magento 管理面板时遇到问题 它在我们的 webdev 服务器上 100 工作 不久前在临时服务器上也工作得很好 我做了一些研究 大多数人认为这与在本地主机上运行 Magento 以及浏览器不为域名中没
  • 将 cookie 作为 node.js 请求的一部分传递

    我正在使用request包来创建我的服务器端请求 我编写了身份验证中间件 用于检查所有请求的 cookie 会话 ID 因此 有没有办法将用户的 cookie 作为请求的一部分包含在内 这是我当前的代码 var cookie parseCo
  • Django:如何计算浏览的人数

    我正在 Django 中制作一个简单的 BBS 应用程序 我希望每当有人看到帖子时 该帖子的浏览量 post view no 就会增加 目前我面临两个困难 我需要限制 post view no 的增加 以便一个用户只能增加一次 无论用户刷新
  • 不同子域上的会话 cookie 是否算作第 3 方?

    假设我有一个网站www example com其中有一个 IFRAME 指向 ASP NET 站点myapp othersite com 据我所知 这会导致会话和第三方 cookie 出现问题 如果我将嵌入式应用程序移至myapp exam
  • 如何保留使用 MCV5/OWIN 更新的 cookie 声明

    我们正在开发一个 OWIN MVC5 项目 我们使用自己的实现IUserStore
  • Cookie - 跨多个域设置

    我公司的设置如下 子域 1 域 1 子域名2 域名1 com 子域名3 域名1 com 子域名4 域名1 com 子域名5 域名1 com 子域名6 域名1 com 子域 1 域 2 子域 2 域 2 subdomain3 domain2
  • NodeJS 快速会话 req.session 未定义

    我正在开发一个简单的登录系统 但会话似乎没有保存 我编写了一个简单的代码进行测试 谁能告诉我它有什么问题吗 我正在运行登录 之后我正在运行 is logged 但我从未登录并且两个会话都未定义 var port process env PO
  • Rails 3 session_store 域 :all 的作用是什么?

    更新了问题以使其更清楚 据我所知 您可以设置 session store 的域以在子域之间共享会话 如下所示 Rails application config session store cookie store key gt my key
  • 如何使用 Java 以编程方式登录 Facebook?

    我正在尝试编写一个可以自动登录 Facebook 的 Java 程序 到目前为止 我已经得到了以下代码 可以将主页 html 页面下载到字符串中 但不知道如何发送电子邮件和密码来登录 Facebook Java 程序还需要处理返回的 coo
  • HttpCookie 和 Cookie 的区别?

    所以我很困惑 因为 msdn 和其他教程告诉我使用 HttpCookies 通过 Response Cookies Add cookie 添加 cookie 但这就是问题所在 Response Cookies Add 只接受 Cookie
  • 如何安全地存储 Discord(OAuth2) 用户的访问令牌?

    我正在努力寻找一种安全保存访问令牌的方法 我的 Web 应用程序在用户授权应用程序后从 DiscordAPI 检索到该访问令牌 我正在为 Discord 机器人创建一个网络界面 重要的是 不是每个人都可以使用它 仅应允许特定 Discord
  • 带 cookie 身份验证的 Gorilla websocket

    这是我的设置 我正在构建一个带有用户登录的服务 使用 Negroni 和 Gorilla 登录后 用户会获得一个会话 cookie 服务器使用该会话 cookie 来授权受保护的端点 受保护的端点之一允许用户 客户端与服务器打开 Webso
  • Cookie 不会重置

    好吧 我被难住了 我已经盯着这个看了好几个小时了 我使用以下代码在 access login php 设置 cookie setcookie username username time 604800 当我尝试注销 位于 access lo
  • 使用 Rails 自动登录?

    我正在尝试使用 Rails 的 Restful Authentication 插件建立一个简单的身份验证系统 我只是想知道它是如何工作的 b c 我似乎无法弄清楚 cookie 的要求是什么 以及如何做到这一点浏览器始终会记住您 6 个多月
  • Cordova 上的 ClearCookiesAsync()

    我正在尝试使用 wp8 cordova 中的插件来清除 WebBrowser cookie 我已经让它与 JavaScript 进行通信 并且我的 c 文件中有类似这样的内容 using WPCordovaClassLib Cordova
  • IdentityServer4 客户端 - 刷新 CookieAuthenticationEvents 上的访问令牌

    我试图在访问令牌过期时使用刷新令牌 类似的问题已回答here https stackoverflow com a 41557598 3501052 And 更新令牌的示例代码 https stackoverflow com question
  • 有没有办法阻止 iOS 上的 Safari 在关闭时清除网站的 cookie?

    我的移动网络应用程序的一位用户抱怨说 每次他关闭手机屏幕后使用该应用程序时 他都必须重新登录该应用程序 发生的情况是 当屏幕关闭时 或者当您通过双击主页按钮并滑开 Safari 来完全关闭 Safari 时 Safari 会清除该网站的 C
  • 如何用javascript正确读取php cookies

    考虑这个 php 和 javascript 代码 然后我在控制台中看到的是 utma 111872281 291759993 1444771465 1445374822 1445436904 4 utmz 111872281 1444771

随机推荐

  • ng-focus 和 ng-blur 事件在 Angularjs 中未触发

  • Android“repo”文档可用吗?

    关于用于 Android 存储库管理的谷歌 repo 工具的唯一文档是 https sites google com a android com opensource download using repo 这比什么都没有 可用的帮助与键入
  • SwingWorker 的原理是什么?

    据我所知 它用于在 swing 应用程序中调度一个新线程来执行一些 后台 工作 但是使用它而不是 普通 线程有什么好处 使用新线程并在完成时使用 SwingUtilities invokeLater 调用某些 GUI 方法是不一样的 我在这
  • 如何在 SQL Server 中创建外键?

    我从来没有为 SQL Server 手工编码 过对象创建代码 并且外键声明在 SQL Server 和 Postgres 之间似乎是有区别的 到目前为止 这是我的 sql drop table exams drop table questi
  • 为什么我的 Python App Engine 应用程序使用 Translate API 时出现 ImportError 错误:没有名为 apiclient.discovery 的模块?

    我收到这个错误谷歌应用程序引擎Python使用过谷歌翻译API 但不知道怎么解决
  • 我可以将 PHPUnit 打包为 phar 吗?

    我想将 PHPUnit 和各种其他测试依赖项打包到 phar 中并将其放入 svn 中 这样我就可以在任何客户端机器上运行 phpunit 而不需要 pear 这可以做到吗 当前状态 phpunit phar 的工作已开始于phpunit
  • 使用类中的静态函数而不命名类

    如何访问类中的函数而不必每次都命名该类 我知道如何使用 using 这样我就不必命名命名空间 但我希望有一种方法可以处理这个静态函数 这样我就可以像调用同一个类中的函数一样调用它们 使用静态yournamespace yourclassna
  • Date.getTime() 与 Date.getTime() 对比日期.now()

    我注意到 now 只能由 Date 对象调用 getTime 只能由日期实例调用 var dd1 new Date console log dd1 now Throws error gt TypeError Object Mon Aug 1
  • 如何在 TypeScript 文件中调用 NodeJS?

    如何加载常规 NodeJS 模块 来自node modules 从一个TypeScript class 当我尝试编译时 ts文件包含 var sampleModule require modulename 编译器提示我不能在此范围内使用 r
  • 核心数据加密

    我有关于核心数据加密的问题 我将一些敏感的用户数据存储在 Core Data SQLite 数据库中 关键值都是可转换的 我使用 AES256 来 即时 加密和解密它们 包括每个值的单独 IV 加密密钥是用户选择的密码的 SHA512 哈希
  • 获取流中符合条件的第一个元素

    如何获取流中与条件匹配的第一个元素 我已经尝试过这个但不起作用 this stops stream filter Stop s gt s getStation getName equals name 该标准不起作用 过滤器方法是在 Stop
  • 使用 Powershell 将 XML 转换为哈希表

    我想转换 XML
  • 扩展打字稿接口

    在 TypeScript 中扩展 Express Request 接口时 我遇到了这个问题 我想使用外部库定义 但无法导入外部库 因为它会导致错误 gt 错误 4 28 TS1147 内部模块中的导入声明无法引用外部模块 编辑 这是一个 d
  • ReferenceError:未定义要求

    我目前正在开发 Mozilla Firefox 插件 我已经设置了一个面板并附加了一个内容脚本 我需要在内容脚本和 main js 之间进行通信 我为此使用 addon sdk 的端口 api 然而由于某种原因 我什至无法在两者之间传递简单
  • 向量储备 C++

    我有一个非常大的多维向量 其大小一直在变化 当我只知道大小的近似值时 使用 vector reserve 函数有什么意义吗 所以基本上我有一个向量 A 256 256 x y 其中 程序中的每次迭代 x 都会从 0 变化到 50 然后再次变
  • Spark 数据帧的 null 值和 countDistinct

    我有一个非常简单的数据框 df spark createDataFrame None 1 3 2 1 3 2 1 3 a b c a b c null 1 3 2 1 3 2 1 3 当我申请一个countDistinct在此数据框上 我发
  • UISearchDisplayController 自动释放如何导致不同视图控制器崩溃?

    我有两个视图控制器 A 和 B 从 A 我导航到视图控制器 B 如下所示 in View Controller A navigateToB method void navigateToB BViewController bViewContr
  • 我可以避免 .NET 中的 JIT 吗?

    假设我的代码是否始终在特定处理器上运行 并且如果我在安装过程中拥有此信息 我是否有机会避免 JIT Use NGEN 本机映像生成器 Ngen exe 是一种可提高托管应用程序性能的工具 Ngen exe 创建本机映像 这些映像是包含已编译
  • 如何让 Internet Explorer 8 支持第 n 个 child() CSS 元素?

    我想为我的表格行提供斑马条纹效果 在所有其他浏览器中 可以使用 CSS 第 n 个子元素来完成 但我也想在 IE 8 上这样做 那么我该怎么做呢 使用填充 选择性就足够好了 没有polyfill 由于IE8支持第一个孩子 你可以欺骗它来支持
  • Cookie 中允许使用哪些字符?

    Cookie 名称和值中允许使用哪些字符 它们与 URL 或某些公共子集相同吗 我问的原因是我最近遇到了一些奇怪的 cookie 行为 这些行为 以他们的名字命名 我只是想知道这是否是特定于浏览器的 或者我的代码是否有问题 根据古老的网景c