【问题标题】:Are newly created cookies not available until a subsequent page load?在后续页面加载之前,新创建的 cookie 是否可用?
【发布时间】:2012-11-22 08:43:05
【问题描述】:

当我第一次创建 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.

所以,我被引导相信这是正常行为,并且我可能不了解 cookie 的工作原理。谁能帮我澄清一下?

【问题讨论】:

    标签: php cookies browser kohana


    【解决方案1】:

    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: */*
    

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

    【讨论】:

    • 谢谢。有趣的是我之前没有想到这一点。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      是的,cookie 只能在后续页面加载时访问,因为 $_COOKIE 全局变量是在您设置 cookie 之前填充的。

      编辑:见https://stackoverflow.com/a/7455234/996876

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

          如果你想在第一个 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
          ?>
          

          在此示例中,如果您不在 php 代码顶部使用 setcookie,则在第一页加载中 $_COOKIE['TestCookie'] 返回 null。 意味着 php 无法达到在 javascript 中更改的 cookie 的值(在第一页加载中)。 这个问题在第二页加载中不存在。

          【讨论】:

            猜你喜欢
            • 2013-01-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-01-21
            • 2015-02-11
            • 2020-03-14
            • 1970-01-01
            • 2021-05-06
            相关资源
            最近更新 更多