【问题标题】:wordpress: cookie data not being set until after first browser refreshwordpress:直到第一次浏览器刷新后才设置cookie数据
【发布时间】:2021-12-17 20:47:55
【问题描述】:

我有一个带有表单的模式,人们可以在其中添加他们的地址,然后提交它。表单的值通过GET 方法保存。我正在使用该输入中的值在我的 function.php 文件中设置一个名为 origin 的 cookie(也是输入的名称):

function action_init() {
    $path = parse_url( get_option('siteurl'), PHP_URL_PATH );
    $host = parse_url( get_option('siteurl'), PHP_URL_HOST );
    $expiry = time() + 36000;
    $origin = isset($_GET['origin']) ? $_GET['origin'] : null;

    if( ( $origin != null ) ) {
        setcookie( 'origin', $origin, $expiry, $path, $host );
    }
}
add_action( 'init', 'action_init' );

提交表单后,浏览器会重定向到根据用户地址查询结果的页面。一切正常。

我的问题是,在同一个搜索结果页面上,我试图像这样显示用户的地址:

if(isset($_COOKIE['origin'])) {
    echo $_COOKIE['origin'];
};

第一次加载搜索结果页面时,该 cookie 不会被调用到页面。只有当我刷新浏览器时它才会最终显示出来。

有没有办法让我从第一个页面加载时就显示该 cookie?

【问题讨论】:

  • “提交表单后,浏览器重定向到查询结果的页面” - 听起来这不是真正的 redirect(第二次请求),而是您首先将表单数据提交到哪里...?在这种情况下,当然 cookie 还不可用 - 因为它只会在处理该请求时创建。但是你可以通过 $_GET 获得值,所以在那个实例中从那里获取它。
  • 啊,是的。我理解,你是对的,那是表单数据被发送到的地方,所以不是重定向。 “那么在那种情况下从那里拿走它”......你能扩展一下吗?你是说我可以使用$origin = isset($_GET['origin']) ? $_GET['origin'] : null; 和echo $origin 而不是回显cookie?
  • 如果您想将其放入答案表格中,我可以接受。只需使用echo $_GET['origin'];,现在就可以正常工作了。

标签: php wordpress cookies


【解决方案1】:

表单提交后,浏览器重定向到查询结果的页面

听起来那不是实际的重定向(第二次请求),而是您首先提交表单数据的位置到。在这种情况下,当然 cookie 还不可用 - 因为它只会在处理该请求时创建。

但是你可以通过 $_GET 获得值,所以在那个实例中从那里获取它。

【讨论】:

    猜你喜欢
    • 2014-03-22
    • 2018-11-21
    • 1970-01-01
    • 2013-08-07
    • 2014-05-07
    • 2013-06-25
    • 2011-02-01
    • 1970-01-01
    • 2014-08-10
    相关资源
    最近更新 更多