Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在后续页面加载之前,新创建的Cookie是否不可用?_Php_Cookies_Browser_Kohana - Fatal编程技术网

Php 在后续页面加载之前,新创建的Cookie是否不可用?

Php 在后续页面加载之前,新创建的Cookie是否不可用?,php,cookies,browser,kohana,Php,Cookies,Browser,Kohana,当我第一次创建cookie时,在后续页面加载之前,我似乎无法获取相同的cookie。这就好像浏览器在第二次请求页面之前不存在cookie一样 我使用的是Kohana PHP框架: Cookie::set('new_cookie', 'I am a cookie'); $cookie = Cookie::get('new_cookie'); //$cookie is NULL the first time this code is run. If I hit the page again and

当我第一次创建cookie时,在后续页面加载之前,我似乎无法获取相同的cookie。这就好像浏览器在第二次请求页面之前不存在cookie一样

我使用的是Kohana PHP框架:

Cookie::set('new_cookie', 'I am a cookie');
$cookie = Cookie::get('new_cookie');
//$cookie is NULL the first time this code is run. If I hit the page again
and then call Cookie:get('new_cookie'), the cookie's value is read just fine.

所以,我相信这是正常的行为,我可能不理解cookies是如何工作的。有人能帮我澄清一下吗?

Cookies设置在HTTP头中,所以当服务器返回页面时。 重新加载页面时,浏览器会将其发送回服务器

因此,在一个新的请求之后,它们就“可见”是完全正常的

以下是来自服务器的响应示例:

HTTP/1.1 200 OK
Content-type: text/html
Set-Cookie: name=value
Set-Cookie: name2=value2; Expires=Wed, 09-Jun-2021 10:18:14 GMT

(content of page)
重新加载页面时,浏览器会发送以下信息:

GET / HTTP/1.1
Host: www.example.org
Cookie: name=value; name2=value2
Accept: */*

这就是为什么服务器只能在浏览器发出新请求后才能看到它们。

客户端(浏览器)在对某个请求的响应中看到新的cookie。然后,它在所有后续请求中将其发送到服务器。是的,这是正常的行为。

是的,COOKIE只能在后续页面加载时访问,因为在设置COOKIE之前填充了$\u COOKIE全局


编辑:请参见

您正确地假设Cookie在下一页加载之前不可用。Cookie存储在浏览器中,并在文档发送到客户端后创建。当客户端再次加载(或重新加载)您的任何页面时,任何现有cookie都将与页面请求一起发送到服务器

如果您想在第一次php页面加载中使用cookie(用JS更改值),则必须在php代码顶部使用setcookie。 然后创建cookie,可以在JS中更改值,并在第一次php页面加载中使用

例如:

<?php
   setcookie('testCookie', 'testValue', 0, "/");
?>

<script type="javascript">
   document.cookie = "testCookie=123456;path=/";
</script>

<?php
   echo $_COOKIE['testCookie'];// return 123456
?>

document.cookie=“testCookie=123456;path=/”;
在本例中,如果在php代码顶部不使用setcookie,则在第一页加载中,$\u COOKIE['TestCookie']返回null。 意味着php无法达到javascript中更改的cookie值(在第一页加载中)。
第二页加载中不存在此问题。

谢谢。有趣的是我之前还没弄明白。