Примечание: решение здесь должно быть сделано на этапе разработки приложения. Это будет сложно спроектировать позже.
Используйте скрытое поле для передачи идентификатора сеанса .
Чтобы это работало, каждая страница должна содержать форму:
<form method="post" action="/handler">
<input type="hidden" name="sessionId" value="123456890123456890ABCDEF01" />
<input type="hidden" name="action" value="" />
</form>
Каждое действие на вашей стороне, включая навигацию, отправляет форму назад (при необходимости устанавливая action
). Для «небезопасных» запросов вы можете включить другой параметр, например, содержащий значение JSON данных, которые должны быть отправлены:
<input type="hidden" name="action" value="completeCheckout" />
<input type="hidden" name="data" value='{ "cardNumber" : "4111111111111111", ... ' />
Поскольку файлов cookie нет, каждая вкладка будет независимой и не будет знать о других сеансах в том же браузере.
Много преимуществ, особенно когда речь идет о безопасности:
- Не зависит от JavaScript или HTML5.
- По своей сути защищает от CSRF .
- Не зависит от печенья, поэтому защищает от POODLE .
- Не подвержен фиксации сессии .
- Может предотвратить использование кнопки «назад», что желательно, если вы хотите, чтобы пользователи следовали по заданному пути через ваш сайт (это означает, что могут быть предотвращены логические ошибки, которые иногда могут быть атакованы запросами не по порядку).
Некоторые недостатки:
- Функциональность кнопки Назад может быть желательна.
- Не очень эффективно с кэшированием, так как каждое действие - это POST.
Дополнительная информация здесь .