【问题标题】:Cookie not set until a second refresh直到第二次刷新才设置 Cookie
【发布时间】:2014-03-22 03:00:34
【问题描述】:

我在第 1 页有一个表格:

<form method="post" action="request-form">
    <input
        type="text"
        id="amzQry"
        name="item"
        placeholder="What do you need?"
        autocomplete="on"
    />
    <input
        id="autocomplete"
        name="destination"
        placeholder="where? (e.g. Buenos Aires)"
        onfocus="geolocate()"
        type="text"
        required=""
        aria-required="true"
        autocomplete="off"
    />
    <button type="submit" value="">
        Submit
    </button>
</form>

我希望以持久的方式保存此信息,以便即使用户随后登录(在本例中为 joomla),cookie 数据也是持久的并且可以被调用。这就是为什么我在这种情况下使用 cookie 而不是会话的原因。如果这不是正确的做法,请纠正我。

我有一些代码可以设置和检索第 2 页上的 cookie:

<?php
    $itemcookie = $_POST['item'];
    $detsinationcookie = $_POST['destination'];

    setcookie("itemcookie", $itemcookie, strtotime('+30 days'));
    setcookie("destinationcookie", $detsinationcookie, strtotime('+30 days'));
?>

但是在表单提交后加载时,cookie 数据没有出现在第二页上。如果我刷新第二页,数据会出现在正确的位置,即我用例如调用它的地方

<?php
    echo $_COOKIE["itemcookie"];
?>

如何在第 2 页立即获取 cookie 数据?

【问题讨论】:

    标签: javascript php cookies


    【解决方案1】:

    你不能。

    如果您检查manual:

    Once the cookies have been set, they can be accessed on the next page load with the $_COOKIE or $HTTP_COOKIE_VARS arrays.
                                                                ^^^^^^^^^^^^^^
    

    这意味着您的 cookie 在您设置它们的页面/脚本上不可用。

    您可以使用另一个变量来显示该值,例如:

    $itemcookie_value = isset($_POST['item']) ? $_POST['item'] : $_COOKIE["itemcookie"];
    

    【讨论】:

      【解决方案2】:

      显然你在调用 setcookie() 之前有一些输出 如果在 session_start()、setcookie() 或 header() 之前有一些输出(甚至是一个空格字符),浏览器将无法识别 cookie,并且在脚本启动后它们将不可用。

      【讨论】:

      • 这是在 Joomla 的组件文件中。我猜在组件文件之前有相当多的输出。那么如何在提交之前将数据放入 cookie 我猜,javascript?
      【解决方案3】:

      你可以。

      您所要做的就是使用 AJAX 请求设置 cookie,当您仍在页面上时设置 cookie,然后当您刷新页面一次时,cookie 将可供您使用。

      【讨论】:

        猜你喜欢
        • 2021-12-17
        • 1970-01-01
        • 2011-10-23
        • 1970-01-01
        • 2019-08-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多