2011-12-02 63 views
4

我想在没有任何成功的情况下在wp ajax请求处理程序中设置cookie。
希望有人能帮助我。

这里是客户端的代码:
如何在wordpress 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'); 
+0

什么是你看到的,显示它不工作? –

+0

这显然是一个例子!我真正的功能被执行,除了setcookie()之外,任何事情都可以正常进行,我没有调试这个函数,因为我不知道如何以ajax的方式做到这一点 –

+0

你怎么知道它不工作?你在看什么?它在做什么? –

回答

3

好的球员予固定的。 为了让它工作,你必须设置该网站的cookie路径为“/”(根),而不是目前的“后”或“目录名称”:

相反的:

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

用途:

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

+4

**提示**:不是使用硬编码路径,而是使用硬编码路径$ _SERVER变量,最好使用一些WP常量:'COOKIEPATH'和'COOKIE_DOMAIN' - 例如:'setcookie('foo',$ _POST ['foo'],time()+ 62208000,COOKIEPATH,COOKIE_DOMAIN);' –