Pe scurt: o nouă sesiune php este pornită la fiecare solicitare făcută prin nextjs, trebuie cumva să păstrez sesiunea de utilizator anonim în viață.
Pentru utilizatorii mei anonimi, trebuie să țin evidența datelor trimise prin nextjs.
Mi-am dezvoltat inițial aplicația cu Drupal 8.9, iar multe luni mai târziu am făcut upgrade la 9.4-dev.
Înainte de upgrade la 9.4-dev, eram sigur că sesiunile funcționau corect în mai multe browsere și utilizatori anonimi în același timp; Aș putea folosi aplicația, stoca și reutiliza date unice pentru fiecare utilizator anonim etc.Din păcate, este greu de verificat acest lucru, retrogradarea la 8.9 va provoca dureri suplimentare.
După upgrade, utilizatorii anonimi partajează brusc aceeași sesiune. Acest lucru ar putea fi legat de https://www.drupal.org/project/session_based_temp_store/issues/3257214 și https://www.drupal.org/node/3006306 dar nu sigur. Utilizarea session_based_temp_store:1.1 are ca rezultat o sesiune partajată și session_based_temp_store:1.2 are ca rezultat o sesiune nepersistentă.
Codul de mai jos a funcționat:
dacă ($this->currentUser->isAuthenticated()) {
$user_preferences = unserialize($this->currentUser->get('field_preferences')->value);
foreach ($valori ca $cheie => $valoare) {
$user_preferences[$key] = $valoare;
}
$this->currentUser->set('field_preferences', serialize($user_preferences))->save();
}
else {
$session = \Drupal::service('session_based_temp_store')->get('mymodule_user');
$user_preferences = $session->get('d_user');
foreach ($valori ca $cheie => $valoare) {
$user_preferences[$key] = $valoare;
}
$session->set('d_user', $user_preferences);
}
Încercând să rezolv problema, am încercat să folosesc tempstore.private, ceea ce a dus la aceeași problemă (sesiune nouă la fiecare solicitare).
După aceasta, am încercat să folosesc codul de mai jos, ceea ce a dus și la aceeași problemă:
$_SESSION['my_module']['data'] = 'Datele mele';
$request = $this->requestStack->getCurrentRequest();
$session = $request->getSession();
Chiar și testul var $_SESSION['my_module']['data'] este „resetat” de fiecare dată. Deci nu contează cu adevărat ce fel de abordare de stocare încerc să folosesc; problema este în mod clar o sesiune nepersistentă.
Toate resursele mele de odihnă sunt apelate cu solicitări POST și autentificate cu oauth2. Totul funcționează frumos pentru utilizatorii autentificați. De asemenea, utilizatorii anonimi pot face cereri cu succes.
Căutând pe Google, nu prea găsesc nimic util, ceea ce mă face să cred că îmi lipsește ceva evident...
Scopul principal este: utilizatorii anonimi trebuie să păstreze o sesiune persistentă într-un drupal fără cap, de asemenea, atunci când utilizatorul închide browserul și revine o săptămână mai târziu, aceeași sesiune trebuie să fie încă vie.
Nu vreau să stochez datele introduse de utilizator în frontend.
Problema este logica cred...: de unde poate sti Drupal cine face cererea anonima? Ar trebui să am un fel de cookie de utilizator anonim în frontend, conectat la o sesiune de utilizator anonimă în backend, transmis la fiecare solicitare?
Poate cineva sa ma indrume in directia buna va rog? Orice ajutor este mult apreciat.