Bonjour,
J'utilisais une session php, tout fonctionnait simplement et bien. La vie était belle.
Mais j'avais des alertes WP concernant un conflit avec l'API REST que j'ai prises au sérieux.
Donc j'ai entrepris d'utiliser un cookie de session et cela fait trois jours que je galère.
Je vous passe les millions de problèmes que j'ai du régler avant de le faire "marchoter" (pb samesite : modification du php_ini et du wpconfig, initialisation avec valeur obligatoire, unserialize ne renvoie pas la valeur sérialisée, etc...)
De ce que j'ai compris.
Le cookie ne fonctionne que s'il est appelé avant l'en-tête.
Donc j'ai fait cela dans "simple-demand.php" (c'est mon plugin) :
Où $param est un tableau sérialisé (dans le doute, car je ne savais pas si un tableau pouvait être passé en paramètre).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 add_action('init', 'add_article_cookie'); function add_article_cookie($param) { if(empty($param) || is_null($param) || $param=''){ var_dump("param : " . $param); var_dump("nul ou vide ou ''"); return; } $SD_tableau_REFS = unserialize($param); if (!isset($_COOKIE['Simple_Demande_cookie']) && is_array($SD_tableau_REFS)) { $SD_tableau_REFS=[]; // Ce cookie m'oblige à l'initialiser avec une valeur alors qu'il n'y a aucun contexte $Articles = serialize($SD_tableau_REFS); setcookie( 'Simple_Demande_cookie', $Articles,['samesite' => 'Lax']); $_COOKIE['Simple_Demande_cookie'] = $Articles; // Forcer l'inscription } else if(is_array($SD_tableau_REFS)){ $returnValue = preg_replace('\'\\\\\'', '', $_COOKIE['Simple_Demande_cookie'], -1, $count); $Tableau_articles = unserialize($returnValue); if(!is_null($Tableau_articles)){ $Tableau_articles= array_merge($Tableau_articles,$SD_tableau_REFS); $Tableau_articles=array_unique($Tableau_articles); } $Articles = serialize($Tableau_articles); setcookie( 'Simple_Demande_cookie', $Articles,['samesite' => 'Lax']); $_COOKIE['Simple_Demande_cookie'] = $Articles; // Forcer l'inscription var_dump($_COOKIE); } return $param; }
preg_replace est présent car (en plus) entre serialize et unserialise la valeur n'est pas identique ! Des caractères "\" traînent.
Quand je dis "marchoter" c'est juste que je vois ma fonction être appelée sans cesse. Un cookie se crée.
Placé dans 'init', la fonction est donc appelée quasi tout le temps, à chaque changement de page.
Ce qui n'était pas prévu au départ, car je n'en ai besoin qu'en cas de modification de la valeur.
Elle est appelée sans valeur pour l'argument $param, j'ai donc dû imaginer des contournements à l'initialisation (quand le cookie n'est pas déjà déclaré).
Cependant, je ne parviens pas à passer les arguments $param.
Je les génère dans une page "single.php".
Quand les arguments sont prêts, la fonction n'est pas appelable , et quand la fonction est appelée les arguments ont périmé.
J'ai essayé mille façons d'appeler la fonction.
Avec ou sans utiliser le hook 'init', des fois que...
Rien ne passe.
Ça je ne comprends pas comment ça peut fonctionner (vu sur un site)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 if (function_exists('add_article_cookie')) { add_article_cookie($param); }
En appel de fonction simple
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 do_action('init, $param);
en fonction anonyme dans la page
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 do_action('add_article_cookie, $param);
et j'en passe...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 add_filter('init', function () use ($param) { // le corps de la fonction ici }
J'ai même essayé de passer $param en Globale, sans résultat (mais ça c'est une autre histoire).
Ma fonction n'est jamais appelée, sauf quand elle est dans 'init' et que je ne peux lui passer aucun paramètre.
C'est à dire appelée intempestivement et sans argument.
Il y a forcément un truc important que je ne comprends pas concernant la gestion d'un cookie.
Celui-ci me sert à enregistrer le nombre d'articles ajoutés dans un panier.
Je crois que tous les paniers fonctionnent avec des cookies.
Donc, un jour, pour quelqu'un, ça a fonctionné.
Merci pour votre aide.
Partager