Знайдено помилку в ядрі, яка видає критичну помилку, якщо контент відкривається для створення анонімним користувачам, а потім вони намагаються увійти.
Проблема/Мотивація
Розпочато сеанс для анонімного користувача в змішаному режимі, що викликає виняток PDOException, коли користувач намагається увійти.
PDOException: SQLSTATE[23000]: Порушення обмеження цілісності: 1062 Дубльований запис 'h0c...' для ключа 'PRIMARY': UPDATE {sessions}
Кроки для відтворення
- Налаштування веб-сервера: увімкнення SSL. Можливо, доступні як http, так і https, або лише https.
- Увімкнення змішаного режиму в Drupal: $conf['https'] = TRUE;
- Встановлення свіжої версії Drupal 7.
- Увімкнення модулів wysiwyg, ckeditor.
- Дозволити відвідувачам створювати обліковий запис та вимагати підтвердження електронною поштою. /admin/config/people/accounts
- Додати дозвіл для анонімного користувача на створення вузлів типу Article.
- Додати формат FullHTML для анонімного користувача.
- Відкрити сторінку https /node/add/article як анонімний користувач. Буде створено файл cookie SSESS.
- Створити новий обліковий запис
- Спробуйте увійти за посиланням з електронної пошти (або посиланням для скидання пароля) у поточному браузері.
Пропоноване вирішення
Проблема викликана дублікатом запису в таблиці сесій з тим самим ssid. Запис створюється вдруге, оскільки відсутній файл cookie про попередньо відкритий незахищений сеанс.
Я виявив, що модулі wysiwyg та ckeditor відкривали сеанс за допомогою drupal_session_start(), але drupal_session_commit() наприкінці не зберігає незахищений файл cookie.
Наданий патч виправить цю проблему.