gpt4 book ai didi

php - PHP 中内置函数 setcookie() 和 setrawcookie() 的实际实际差异是什么?

转载 作者:IT王子 更新时间:2023-10-28 23:53:32 26 4
gpt4 key购买 nike

我正在详细学习 PHP 中最重要的 Cookies 概念之一。

在研究 Cookies 时,我了解到“cookie 的值在发送 cookie 时自动进行 URL 编码,并在接收时自动解码(为防止 URL 编码,请改用 setrawcookie() ).

上面的说法让我产生了很多疑惑,如下:

  1. “cookie 的值在发送 cookie 时自动进行 URL 编码,并在接收时自动解码” 实际发生了什么?
  2. 既然已经有一个函数 setcookie() 可用于设置 cookie 值,为什么还需要另一个函数,如 setrawcookie()
  3. URL 编码URL 解码 的过程是否不安全/有害/危险/缓慢/任何其他应该避免的过程?
  4. setcookie() 相比,使用 setrawcookie() 有哪些优点/缺点?
  5. 哪个安全/更好/安全/可靠/等等。 setcookie() 还是 setrawcookie()
  6. 不能像 $_COOKIE['cookie_variable'] = 'some_value' 那样设置 cookie,而不是使用 setcookie()setrawcookie ()?

如果有人能用完美、合适且易于理解的代码示例以及清晰、清晰、易于理解的逐步解释来消除我上述所有疑问,那将对我有很大帮助。

谢谢。

最佳答案

  1. What does actually happen practically by means of "The value of the cookie is automatically URLencoded when sending the cookie, and automatically decoded when received" ?

这意味着您不必担心特殊字符。

请注意,cookie 不是 PHP 概念;它们是 HTTP 协议(protocol)的扩展。每个协议(protocol)都有一个你需要遵守的严格结构,否则它根本行不通。该结构依赖于定界符 - 字符或在该协议(protocol)中分配给它们的特殊含义的字符序列。
通过各种协议(protocol)传输的数据不可避免地会包含这些特殊字符,这就是为什么编码是必要的。

例如,分号 (;) 在 Set-Cookie HTTP Header 中用作分隔符,因此如果您的 cookie 值包含它,则需要对其进行编码,否则浏览器在接收到 cookie 时将无法正确解析该 cookie。

如果您发送一个值为 foo;bar 的 cookie,没有编码,浏览器会将其视为带有 bar 的值 foo > 旗帜附在上面。
你会丢失 ;bar 作为数据的一部分,并且由于 bar 根据协议(protocol)是一个未知标志,浏览器会简单地忽略它,所以你甚至不知道根本就没有错误。

当你用 setcookie() 设置一个 cookie 时,PHP 会自动进行编码,然后当你从 $_COOKIE super 全局读取时自动解码它。

  1. Why there is a need of another function like setrawcookie() when there is already a function setcookie() available for setting the cookie values?

主要有两个原因:

  1. 您发送的值可能已经被编码。

    你想避免双重编码,因为充其量这意味着你需要做更多的工作。在最坏的情况下,它可能会完全损坏数据(即您可能永远无法 100% 确定原始数据是什么)。

  2. 编码值的方法有很多种,setcookie() 使用的方法可能并不理想。

    URL 编码通常会编码比 cookie 格式需要的更多的数据。
    在极端情况下(您永远不必担心这一点),由于编码数据通常比原始数据大,这可能会导致它超过最大 cookie 大小(大约 4kb)。或者您可能只是想节省带宽。

但您 100% 知道数据不需要编码的情况也很常见,因此您只是想跳过不必要的步骤。

  1. Is the process of URL encoding and URL decoding unsafe/harmful/ hazardous/slow/anything else so that it should be avoided?

一般不会,但是上面应该已经回答了。

  1. What are the benefits/drawbacks of using setrawcookie() over setcookie()?

缺点是如果需要,您需要自己对值进行编码。
上面已经解释了好处。

  1. Which one is safe/better/secure/reliable/etc. setcookie() or setrawcookie()?

setcookie() 减少了不熟悉 cookie protocol 的人犯错的空间.

但这是有代价的——假设您总是需要 URL 编码。假设在编程中通常是一件坏事。

对于新手来说,setcookie() 更容易使用。
对于专家来说,setrawcookie() 限制较少,因此更灵活。

两者都不是天生的更好,并且由于您提到了“安全”- 两者都对安全性没有任何影响。

  1. Can't the cookies be set like other variables like $_COOKIE['cookie_variable'] = 'some_value' instead of using setcookie() or setrawcookie()?

没有。

关于php - PHP 中内置函数 setcookie() 和 setrawcookie() 的实际实际差异是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46193004/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com