gpt4 book ai didi

php - "the value of the cookie is automatically URLencoded when sending the cookie, and automatically decoded when received"是什么意思?

转载 作者:行者123 更新时间:2023-12-02 17:22:14 28 4
gpt4 key购买 nike

在学习 PHP 中 Cookie 的概念时,我从 w3schools PHP Tutorial 中看到以下语句:

The value of the cookie is automatically URLencoded when sending the cookie, and automatically decoded when received (to prevent URLencoding, use setrawcookie() instead)

我没看懂这句话的意思。我对上述声明有以下疑问:

  1. cookie 从哪里发送给谁,又从哪里收到 cookie?
  2. “cookie 的值在发送 cookie 时自动进行 URL 编码,并在接收时自动解码”实际上发生了什么?
  3. setrawcookie() 起什么作用?我的意思是它实际上做了什么?

以下是我为理解 cookie 的概念而尝试编写的代码:

<?php
$cookie_name = "user";
$cookie_value = "John Doe";
setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/");

 <?php
if(!isset($_COOKIE[$cookie_name])) {
echo "Cookie named '" . $cookie_name . "' is not set!";
} else {
echo "Cookie '" . $cookie_name . "' is set!<br>";
echo "Value is: " . $_COOKIE[$cookie_name];
}

有人可以引用上面的代码清除我的查询吗?

最佳答案

HTTP cookie 是在客户端(浏览器)和网络服务器之间传输的 header 。

当您使用 setcookie 时,您正在做的是指示 PHP 解释器以这种格式在其响应中注入(inject) header :

Set-Cookie:name=value

该 cookie 将由浏览器存储,并在以后的请求(对同一主机)中由浏览器在 Cookies 请求 header 中返回,如下所示:

Cookie:name=value;cookie2=value;cookie3=value

通常,在传输此文件时,您应该对任何特殊字符进行 urlencode。假设我想指定一个名为“operator”且值为“>”的 cookie,那么我应该发出此 header :

Set-Cookie:operator=%3E

当它说该值是自动 urlencoded 时,是说您不必为此担心。你可以简单地做:

setcookie('operator', ">");

PHP 将直接处理 urlencoding,生成正确的 header 。

在服务器端,您将在 $_COOKIES 超全局中接收 cookie,与 $_GET$_POST< 发生的方式相同,值将自动为您进行 url 解码。因此,如果客户端返回先前设置的 cookie %3E,您将在代码中看到:>

如果您使用浏览器检查器,您可以在任何请求-响应中看到相关的 header 。例如:

请求(返回 cookie)

request sending cookie

响应(设置cookie)

response returning cookie

setrawcookie,作用相同,但您必须自己进行 urlencode。来自文档:

setrawcookie() is exactly the same as setcookie() except that the cookie value will not be automatically urlencoded when sent to the browser.

更有可能的是,您没有任何理由直接使用 setrawcookie

关于php - "the value of the cookie is automatically URLencoded when sending the cookie, and automatically decoded when received"是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41780170/

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