Надіслав: Admin , дата:

Знайдено помилку в ядрі, яка видає критичну помилку, якщо контент відкривається для створення анонімним користувачам, а потім вони намагаються увійти.

Проблема/Мотивація

Розпочато сеанс для анонімного користувача в змішаному режимі, що викликає виняток PDOException, коли користувач намагається увійти.
PDOException: SQLSTATE[23000]: Порушення обмеження цілісності: 1062 Дубльований запис 'h0c...' для ключа 'PRIMARY': UPDATE {sessions}

Кроки для відтворення

  1. Налаштування веб-сервера: увімкнення SSL. Можливо, доступні як http, так і https, або лише https.
  2. Увімкнення змішаного режиму в Drupal: $conf['https'] = TRUE;
  3. Встановлення свіжої версії Drupal 7.
  4. Увімкнення модулів wysiwyg, ckeditor.
  5. Дозволити відвідувачам створювати обліковий запис та вимагати підтвердження електронною поштою. /admin/config/people/accounts
  6. Додати дозвіл для анонімного користувача на створення вузлів типу Article.
  7. Додати формат FullHTML для анонімного користувача.
  8. Відкрити сторінку https /node/add/article як анонімний користувач. Буде створено файл cookie SSESS.
  9. Створити новий обліковий запис
  10. Спробуйте увійти за посиланням з електронної пошти (або посиланням для скидання пароля) у поточному браузері.

Пропоноване вирішення

Проблема викликана дублікатом запису в таблиці сесій з тим самим ssid. Запис створюється вдруге, оскільки відсутній файл cookie про попередньо відкритий незахищений сеанс.
Я виявив, що модулі wysiwyg та ckeditor відкривали сеанс за допомогою drupal_session_start(), але drupal_session_commit() наприкінці не зберігає незахищений файл cookie.
Наданий патч виправить цю проблему.

https://www.drupal.org/project/drupal/issues/3276407

Теґи