Woocommerce-Sitzungscookie wird bei Verwendung von admin-ajax.php nicht auf Ajax gesetzt

Lesezeit: 2 Minuten

Ich habe eine WordPress-Ajax-Funktion, die das verwendet WC()->Sitzung um Sitzungsdaten zu übernehmen und in der Funktion zu verwenden. (z. B. ausgewählte Versandart aus der Sitzung übernehmen und anzeigen).

Die Funktion funktioniert auf meinem lokalen Rechner ordnungsgemäß. Allerdings funktioniert es nicht WP Engine Live-Server. Ich habe sie bereits kontaktiert und sie haben mir mitgeteilt, dass das Problem nicht auf ihrer Seite liegen sollte.

Soweit ich sehen kann, werden die folgenden Cookies nicht nur für admin-ajax.php-Anfragen auf dem Live-Server gesetzt:

  • Set-Cookie: woocommerce_items_in_cart
  • Set-Cookie: woocommerce_cart_hash
  • Set-Cookie: wp_woocommerce_session

Hat jemand eine Idee, was dieses Problem verursachen könnte?

LoicTheAztecs Benutzeravatar
LoicTheAztec

Das ist nicht normal und scheint mit dem Hosting der WP Engine zusammenzuhängen.

Jetzt sollten Sie versuchen, die Aktivierung der Woocommerce-Kundensitzung zu erzwingen (falls sie noch nicht aktiviert ist), mit dem folgenden Code, der dies festlegt WC_Session Plätzchen.

Es könnte wieder aktiviert werden WC()->session beim Benutzen admin-ajax.php:

add_action( 'woocommerce_init', 'enable_wc_session_cookie' );
function enable_wc_session_cookie(){ 
    if( is_admin() )
       return;

    if ( isset(WC()->session) && ! WC()->session->has_session() ) 
       WC()->session->set_customer_session_cookie( true ); 
}

Der Code wird in die Datei „functions.php“ Ihres aktiven untergeordneten Themas (oder aktiven Themas) verschoben. Es könnte funktionieren.

Amins Benutzeravatar
Amin

Mit der akzeptierten Antwort haben Sie eine Sitzung auf allen Seiten, was zu einigen Problemen wie der Deaktivierung des Caches oder langsameren Seitenladevorgängen für Erstbesucher führt. Woocommerce selbst setzt dieses Cookie bei Bedarf und wenn es benötigt wird und vernichtet es, sobald es nicht benötigt wird Ich denke, Sie sollten der gleichen Strategie folgen, das Cookie mit einer der folgenden Methoden setzen und es zerstören, sobald Sie damit fertig sind. (z. B. wenn die Zahlung der Bestellung abgeschlossen ist)

WC()->session->set_customer_session_cookie( true );
// OR
do_action('woocommerce_set_cart_cookies', true);

1450690cookie-checkWoocommerce-Sitzungscookie wird bei Verwendung von admin-ajax.php nicht auf Ajax gesetzt

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy