Смотрите, что нейросеть предлагает, ИМХО это отличный вариант:)
Развернуть
При генерации формы сервер создаёт уникальный токен (случайную строку) и кладёт его в скрытое поле формы, например: <input type="hidden" name="_xfToken" value="abc123...">.
Одновременно сервер сохраняет состояние этого токена (например, в сессии пользователя): «токен abc123 активен для формы публикации в теме X».
Когда пользователь нажимает «Отправить», токен уходит на сервер вместе с данными.
Сервер проверяет:
существует ли такой токен;
не истёк ли он;
соответствует ли сессии пользователя и контексту (тема, узел и т. п.).
Если проверка успешна, сервер потребляет (invalidates) токен: помечает его как использованный. Даже если пользователь повторно отправит ту же форму (например, через F5 или двойной клик), токен уже невалиден — сервер отклонит запрос.
Таким образом, сервер «понимает», что это повторная отправка, не сравнивая текст, а проверяя, был ли уже использован одноразовый маркер.
Этот это называется nonce (number used once), такой алгоритм полностью решает задачу двойной отправки форм, но не решает баг с realtime-системой, которая вставляет пост в DOM без отправки формы (в чём сейчас, судя по всему, и состоит проблема).
Отредактировано Merlin777 (Сегодня 17:47:25)