2011-12-02 104 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);' –