【问题标题】:How do I set a cookie in a wordpress ajax request handler?如何在 wordpress ajax 请求处理程序中设置 cookie?
【发布时间】:2012-01-11 13:07:45
【问题描述】:

我试图在 wp ajax 请求处理程序中设置一个 cookie,但没有成功。
希望有人可以帮助我。

这是客户端代码:

var foo = $('#foo');
$.ajax({
    url: 'http://127.0.0.1/wordpress/wp-admin/admin-ajax.php',
    type:   'post',
    dataType:   'json',
    cache:  'false',
    data: { 'action' : 'foo', 'foo' : foo.val(), 'nonce' : foo.data('nonce') },
    success: function(data) { console.debug(data) },
    error: function() { console.error('fail') }
});

这是插件:

function foo() {
    check_ajax_referer( 'foo-my-nonce', 'nonce', 'what?!' );

    if (isset($_POST['foo'])) {
        $dir = pathinfo($_SERVER['REQUEST_URI']);
        $dir['dirname'] = $dir['dirname'].'/';
        setcookie('foo', $_POST['foo'], time()+62208000, $dir['dirname'], $_SE    RVER['HTTP_HOST']);

        $output = array('response' => 'success', 'message' => 'have fun');
    }
    else
        $output = array('response' => 'failed', 'message' => 'you are a loser');

    header("Content-type: application/json");
    echo json_encode( $output );
    exit;
 }

 add_action('wp_ajax_nopriv_foo','foo');

【问题讨论】:

  • 您看到什么表明它不起作用?
  • 这显然是一个例子!我的真实函数已执行,除了 setcookie() 之外一切正常,我没有调试此函数,因为我不知道如何以 ajax 方式执行此操作
  • 你怎么知道它不起作用?你在看什么?它在做什么?
  • 所以我在同一个函数中更新了一个自定义字段并且工作正常。我还对 $_COOKIE['foo'] 进行了检查,它没有设置(在非 ajax 函数中)
  • 谢谢。这对我很有用!我已经为我的网站制作了一个定制版本,并进行了一些调整,例如根据 cookie 检查输出不同的电子邮件地址并根据请求显示加载 gif 等。

标签: ajax cookies wordpress


【解决方案1】:

好的,伙计们,我解决了这个问题。 为了使其正常工作,您必须将 cookie 路径设置为网站的“/”(根),而不是当前的“post”或“dirname”:

代替:

setcookie('foo', $_POST['foo'], time()+62208000, $dir['dirname'], $_SERVER['HTTP_HOST']);

用途:

setcookie('foo', $_POST['foo'], time()+62208000, '/', $_SERVER['HTTP_HOST']);

【讨论】:

  • 提示:与其使用硬编码路径和 $_SERVER 变量,不如使用一些 WP 常量:COOKIEPATHCOOKIE_DOMAIN - 例如:@987654325 @
猜你喜欢
  • 2010-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-28
  • 2014-02-08
  • 2017-08-05
  • 2015-12-21
相关资源
最近更新 更多