代码之家  ›  专栏  ›  技术社区  ›  PHPFan

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

  •  17
  • PHPFan  · 技术社区  · 8 年前

    曲奇饼 详细地

    曲奇饼 我知道了“

    上述说法在我脑海中产生了很多疑问,具体如下:

    1. cookie的值在发送cookie时自动进行URL编码,在收到cookie时自动解码
    2. 当已有函数时 setcookie()
    3. 是过程 URL解码
    4. 使用的优点/缺点是什么 setrawcookie() 结束 setcookie()
    5. 哪一个是安全的/更好的/安全的/可靠的/等等。 setcookie() setrawcookie() ?
    6. $_COOKIE['cookie_variable'] = 'some_value' 而不是使用 setcookie() setrawcookie() ?

    2 回复  |  直到 8 年前
        1
  •  16
  •   Community Mohan Dere    4 年前
    1. 实际上,通过“发送cookie时自动对cookie值进行URL编码,收到cookie时自动解码”,会发生什么?

    这意味着你不必担心特殊的角色。

    请注意,Cookie不是PHP概念;它们是HTTP协议的扩展。每个协议都有一个刚性的结构,你需要遵守,否则它根本不起作用。该结构依赖于定界符,即在该协议中具有特殊含义的字符或字符序列。

    ; Set-Cookie HTTP Header ,因此,如果您的cookie值包含它,则需要对其进行编码,否则浏览器在收到cookie时无法正确解析它。

    foo;bar ,如果不进行编码,浏览器会将其视为值 foo bar 旗帜
    你会输的 ;bar 作为数据的一部分 根据协议,是一个未知的标志,浏览器会忽略它,所以你甚至不知道有错误。

    当您使用设置cookie时,PHP将自动进行编码 setcookie() ,然后当您从 $_COOKIE 超级全球化。

    主要有两个原因:

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

    2. setcookie() 使用可能不可取。

      URL编码通常编码的数据比cookie格式需要的数据多。

    但也很常见,您百分之百地知道数据不需要编码,所以您只想跳过不必要的步骤。

    一般来说不是,但这应该已经在上面得到了回答。

    1. 使用的优点/缺点是什么 setrawcookie() setcookie() ?

    缺点是,如有必要,您需要自己对值进行编码。
    上面已经再次解释了这些好处。

    1. 哪一个是安全的/更好的/安全的/可靠的/等等。 setcookie() setrawcookie() ?

    setcookie() 为不熟悉 cookie protocol

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

    对于新手来说, setcookie()
    对于专家来说, setrawcookie()

    1. cookies不能像其他变量一样设置吗 $_COOKIE['cookie_variable'] = 'some_value' 而不是使用 setrawcookie() ?

        2
  •  6
  •   deceze    8 年前

    URL编码将URL/HTTP中具有特殊含义的特定字符替换为百分比编码字符,例如空格变为 %20 . 看见 https://en.wikipedia.org/wiki/Percent-encoding

    你需要 setrawcookie %20 如果您使用 setcookie %2520 ; 使用 setrawcookie 它将按原样保存并设置为 . 换句话说, “把那该死的饼干放好,我知道我在做什么。”

    看见 The Great Escapism (Or: What You Need To Know To Work With Text Within Text)

    推荐文章