2016-06-27 17 views
1

Erstens habe ich keine Antworten auf ähnliche Fragen, die dies sortiert haben, gesehen. Wenn Sie eine finden, die bereits existiert, lassen Sie es mich bitte wissen.Wordpress setcookie mit AJAX

Einfache AJAX-Anfrage, die einen Cookie setzt, um einen Timer-Ablauf zu speichern, der verdammte Cookie wird nicht gesetzt und ich kann nicht herausfinden, warum.

Ich benutze Vue Resource, also bitte keine jQuery. In der Tat bin ich mir absolut sicher, dass es überhaupt nichts mit JS oder AJAX zu tun hat. Es wird gut geschrieben und der "Ablauf" wird perfekt zurückgegeben.

Die JS:

var sessionKey = document.querySelector('meta[name=dbs]').getAttribute('content'); 
if(sessionKey.length < 1){ 
    var data = {action: 'dbs_reservation'}; 
    this.$http.get(ajaxurl,data).then((response) => { 
     this.sessionExpiry = response.data.expiry; 
    }) 
} 

Die PHP

function dbs_timer_session(){ 
    if(empty($_COOKIE['dbs_timer'])){ 
     $t = time()+600; 
     setcookie('dbs_timer', md5($t).'|'.$t, COOKIEPATH, COOKIE_DOMAIN); 
    } else { 
     $t = explode('|',$_COOKIE['dbs_timer']); 
     $t = $t[1]; 
    } 
    echo json_encode(['expiry' => $t]); 
    wp_die(); 
} 

EDIT 1 Wie gewünscht, die wp_ajax Aktionen

add_action('wp_ajax_nopriv_dbs_reservation', 'dbs_timer_session'); 
add_action('wp_ajax_dbs_reservation', 'dbs_timer_session'); 
+0

Wer stimmte und Phantom downvoter schließen? Würde es Ihnen etwas ausmachen, warum zu erklären? – ggdx

+0

+1 für die Verwendung von jQuery. Sie scheinen 'COOKIEPATH' in das Ablaufzeit-Argument zu übergeben. Zum Testen sollten Sie die Ausgabe von setcookie zurückgeben, was falsch wäre. Ich nehme an, Sie wissen, dass Sie Cookies auch mit js setzen können? Viel schneller! – David

+0

Danke David! Ich kann nicht glauben, dass ich das verpasst habe! Bitte machen Sie dies eine Antwort und ich werde als die richtige markieren – ggdx

Antwort

2

Sie fehlten ein Argument für setcookie

setcookie('dbs_timer', md5($t).'|'.$t, 'missing_expiry_time', COOKIEPATH, COOKIE_DOMAIN); 
-1

Können Sie uns zeigen, wie Sie die setzen Aktion? Die folgenden Beispiele sind abhängig davon, ob Sie sich im Admin oder Frontend befinden.

//For admin use only: 
add_action('wp_ajax_my_action', 'my_action_callback'); 

//For front end use 
add_action('wp_ajax_nopriv_my_action', 'my_action_callback'); 
+0

Es ist nicht so, die AJAX-Anfrage ist eine Art erfolgreich und die JSON wird korrekt zurückgegeben. Wie auch immer, ich habe die Frage bearbeitet – ggdx