How to set cookie in ajax wordpress request handler?

I am trying to set a cookie in a wp ajax request handler without any success.
Hope someone can help me. Here is the client code:

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') } }); 

Here is the plugin:

 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'); 
+4
source share
1 answer

Ok guys, I fixed it. To make it work, you must set the cookie path to the "/" (root) of the website instead of the current "post" or "dirname":

Instead:

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

Using:

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

+3
source

Source: https://habr.com/ru/post/1384331/


All Articles