Вкратце: новый сеанс php запускается при каждом запросе, сделанном через nextjs, я каким-то образом должен поддерживать сеанс анонимного пользователя.
Для моих анонимных пользователей мне нужно отслеживать данные, отправленные через nextjs.
Сначала я разработал свое приложение на Drupal 8.9, а много месяцев спустя обновил его до 9.4-dev.
До обновления до 9.4-dev я был уверен, что сеансы работают правильно в нескольких браузерах и анонимных пользователях одновременно; Я мог бы использовать приложение, хранить и повторно использовать уникальные данные для каждого анонимного пользователя и т. д.К сожалению, это трудно проверить, понижение до 8.9 вызовет дополнительную боль.
После обновления анонимные пользователи неожиданно используют один и тот же сеанс. Это может быть связано с https://www.drupal.org/project/session_based_temp_store/issues/3257214 и https://www.drupal.org/node/3006306 но не уверен. Использование session_based_temp_store:1.1 приводит к общему сеансу, а session_based_temp_store:1.2 приводит к непостоянному сеансу.
Код ниже работал:
если ($this->currentUser->isAuthenticated()) {
$user_preferences = unserialize($this->currentUser->get('field_preferences')->value);
foreach ($values как $key => $value) {
$user_preferences[$key] = $значение;
}
$this->currentUser->set('field_preferences', serialize($user_preferences))->save();
}
еще {
$session = \Drupal::service('session_based_temp_store')->get('mymodule_user');
$user_preferences = $session->get('d_user');
foreach ($values как $key => $value) {
$user_preferences[$key] = $значение;
}
$session->set('d_user', $user_preferences);
}
Пытаясь решить проблему, я попытался использовать tempstore.private, что привело к той же проблеме (новый сеанс при каждом запросе).
После этого я попытался использовать приведенный ниже код, что также привело к той же проблеме:
$_SESSION['my_module']['data'] = 'Мои данные';
$request = $this->requestStack->getCurrentRequest();
$session = $request->getSession();
Даже тестовая переменная $_SESSION['my_module']['data'] каждый раз «сбрасывается». Так что на самом деле не имеет значения, какой подход к хранению я пытаюсь использовать; проблема явно в непостоянном сеансе.
Все мои остальные ресурсы вызываются с помощью запросов POST и аутентифицируются с помощью oauth2. Все работает хорошо для аутентифицированных пользователей. Анонимные пользователи также могут успешно делать запросы.
Поиском в Google я не могу найти ничего полезного, что заставляет меня думать, что я упускаю что-то очевидное.
Основная цель: анонимные пользователи должны поддерживать постоянную сессию в безголовом друпале, а также, когда пользователь закрывает браузер и возвращается через неделю, та же сессия должна оставаться активной.
Я не хочу хранить данные, введенные пользователем, во внешнем интерфейсе.
Я думаю, проблема логична...: как Drupal может узнать, кто делает анонимный запрос? Должен ли я иметь какой-то файл cookie анонимного пользователя во внешнем интерфейсе, связанный с сеансом анонимного пользователя в бэкэнде, который передается с каждым запросом?
Может ли кто-нибудь указать мне правильное направление, пожалуйста? Буду признателен за любую оказанную помощь.