Недавно я обнаружил, что моя система публикации / перенаправления имеет недостатки, и я не вижу альтернативы, чтобы это исправить.
Рассмотрим этот пошаговый сценарий, который должен работать без javascript / ajax:
Поскольку мы обновляем одну и ту же страницу (либо с тегом заголовка HTML, либо с заголовком (Refresh: time, url = url), когда пользователь нажимает клавишу F5, он получит сообщение «Подтвердить повторную отправку формы».
Я не могу найти альтернативу, чтобы вытащить меня из этой ситуации, когда она просит повторно отправить форму. Вот несколько альтернатив и почему они также несовершенны:
Выполните перенаправление заголовка php без обновления. Повторная отправка формы исчезла, но теперь я не могу показать пользователю сообщение об успехе, которое выглядит странно.
Добавить GET var? Success при перенаправлении обратно на ту же страницу. Это работает, потому что по сути мы перенаправлены на новую страницу. Но если пользователь нажмет F5, успех get var останется там навсегда. Кроме того, если пользователь решит модерировать снова, он будет перенаправлен на ту же страницу с тем же get get, и повторная отправка формы будет происходить снова и снова.
Сохраните в переменной сеанса успешное сообщение и загрузите его на перенаправленной странице, затем выполните временное перенаправление обновления на исходную страницу. Проблема в том, что флеш-сообщения сеанса очень ненадежны, когда пользователь модерирует много вкладок одновременно. Сообщения с разных страниц не будут знать, к какой вкладке они принадлежат. Люди, которые не используют куки, также не получают сообщений.
Есть ли какой-нибудь элегантный выход из этого, не полагаясь на javascript?
Я лично предпочитаю идею хранения флеш-сообщений в сессии.
$_SESSION[messages][$id] = array(
'type' => 'success',
'content' => 'Deleted.
)
Идентификатор — это ваш идентификатор потока.
Других решений пока нет …