Предотвращение Повторения Формирует Подчинение Используя Сессии PHP

Мы все видели те сообщения на некоторых вебсайтах, предупреждающих, чтобы не щелкнуть кнопкой не раз, или отрицательные последствия, как платеж счета дважды, могут закончиться. Иногда мы можем вызвать эти проблемы, совершая нападки назад или освежительный напиток кнопки. В этой статье я объясню методологию, посредством чего участок может гарантировать, что каждая форма представлена только однажды, таким образом демонстрируя, что такие предупреждения являются ненужными и, в зависимости от природы вызванных проблем, ценность, восстанавливающая немедленно. Давайте начинать, смотря на процесс, который мы изучаем: Подчинение Формы . Столь же педантичный, как это может казаться, будет стоить детализировать каждый из шагов в этом процессе: Посетитель <лития> просит страницу от сервера, у которого есть форма на этом. <литий> Сервер восстанавливает форму и посылает пользователю. <литий> Пользователь входит в данные по форме и подчиняется серверу. <литий> Сервер обрабатывает данные формы и возвращает проистекающую страницу. Сценарий, который мы теперь должны проанализировать, - то, когда пользователь повторно вызывает предыдущий процесс подчинения формы. То, что мы должны найти или создать, является кое-чем, что изменяется во время процесса подчинения формы, который не зависит от определенной представляемой формы и который мы можем сказать измененный. Это было нагруженным предложением который полностью детали наше решение, так давайте ломать его. Найдите или создайте кое-что который <литий> изменяется во время процесса подчинения формы, <литий> не зависит от определенной формы, представляемой, и <литий> мы можем сказать измененный.

Начиная с пункта, какие изменения не зависят от представляемой формы (e. г. не имеет значения, если это - регистрационная форма информационного бюллетеня, клиент signup форма, форма оплаты, и т. д.), пункт не кое-что, что уже существует и поэтому должно быть создано, так давайте создавать переменную формы, названную submissionId, и предположите, что этому упоминали выше эти 3 свойства. Пока неплохо - или таким образом это появляется! Третья "собственность" состоит в том, что "мы можем сказать, что [это] изменилось", но "изменилось", не собственность переменной, таким образом мы должны смотреть на это более близко. Чтобы сказать кое-что измененное, у нас должны быть контрольная точка, ответ на вопрос, "измененный от какой?" Это - то, где переменная сессии будет играть роль. Если мы будем определять переменную сессии, будем говорить $_SESSION ['nextValidSubmission'] и будем рассматривать это как контрольную точку, то у нас будут все инструменты необходимыми, чтобы защитить наших посетителей. Идея будет состоять в том, чтобы держать переменную сессии обновленной с последним submissionId отосланный и изменить submissionId каждый раз, когда это отослано пользователю. Тогда, если они попытаются повторно представить данные, то они будут представлять старый submissionId, который не соответствует nextValidSubmission, и мы будем знать, чтобы не подвергнуть переработке эти данные. Давайте смотреть на это в терминах процессов: Посетитель <лития> просит страницу от сервера, у которого есть форма на этом. <литий> Сервер восстанавливает форму, , производит новый submissionId, который вложен в форму , обновляет nextValidSubmission , и посылает пользователю. <литий> Пользователь входит в данные по форме и подчиняется серверу. <литий> Сервер обрабатывает данные формы, , изменяет nextValidSubmission , и возвращает проистекающую страницу. Теперь, если посетитель так или иначе повторно пошлет данные, то они будут посылать старый submissionId, который не будет соответствовать новому nextValidSubmission. Так, Вы можете теперь сказать до свидания доверию javascript к кнопкам remove/disable, глупым сообщениям предупреждения, и расстроить клиентов, предотвращая переподчинение формы.