Вместо того, чтобы использовать переменную сеанса, чтобы разрешить им только доступ к текущему шагу, разрешите им доступ к текущему или предыдущему шагу.Вроде флага «как далеко вы можете пройти».
Теперь добавьте ссылки к предыдущим шагам, например, крошку.
Наконец, используйте поиск в постоянном хранилище (db, session, xml, bag of holding и т. Д.) Для данных, уже введенных для этой формы.Создайте пустой набор данных формы, перезапишите все, что находится в постоянном хранилище, а затем перезапишите что-нибудь из самой области формы.Что-то вроде:
populate = structNew(); // this is the data to populate your form with on load
populate.someValue = "";
structappend(populate, dataFromStorage);
structappend(populate, form); // from things submitted from the form scope, in case validation fails
<input type="text" name="someValue" value="#variables.populate.someValue">
Теперь, если кто-то дважды нажимает на один и тот же шаг формы, он увидит (в порядке приоритета) значения, которые они отправили, но не прошли проверку, значения из постоянных данных.магазин, а затем пустую форму.