Рейтинг:0

Постоянный сеанс анонимного пользователя с безголовым D9

флаг ck

Вкратце: новый сеанс 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 анонимного пользователя во внешнем интерфейсе, связанный с сеансом анонимного пользователя в бэкэнде, который передается с каждым запросом?

Может ли кто-нибудь указать мне правильное направление, пожалуйста? Буду признателен за любую оказанную помощь.

Рейтинг:0
флаг cn

Основная цель: анонимные пользователи должны поддерживать постоянный сеанс в безголовый друпал, также когда пользователь закрывает браузер и возвращается через неделю тот же сеанс должен быть еще жив.

Вот для чего нужны файлы cookie. Я не знаю о nextjs, но в моем безголовом приложении React я сохраняю все анонимные пользовательские настройки в виде объекта JSON, который я выгружаю в файл cookie.

Полагаться исключительно на обработку сеансов Drupal для надежного отслеживания пользовательских предпочтений для анонимных пользователей звучит как рецепт катастрофы.

Я не хочу хранить данные, введенные пользователем, во внешнем интерфейсе.

Вам нужно будет сохранить файл cookie. Однако файлы cookie, которые исключительно хранят пользовательские настройки и не используются для отслеживания пользователей, не будут противоречить GDPR и т. д.

Maarten Hartman avatar
флаг ck
Спасибо, я подумаю над этим.
4uk4 avatar
флаг cn
* Опираясь исключительно на сеанс Drupal * ... OP использовал модуль contrib, который самостоятельно устанавливает отдельный файл cookie. Проблемы начались, когда нужно было обновить модуль после обновления ядра.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.