Самый простой способ защиты от CSRF - это добавить случайный хэш в сеанс всякий раз, когда вы загружаете страницу с формой, которую вы хотите защитить. Добавьте это значение в форму, чтобы, когда пользователь отправлял запрос, он приходил на прогулку. Сопоставьте его со значением сеанса на другом конце.
Регенерируйте это случайное значение каждый раз, когда отображается форма.
Это работает, потому что если пользователь уходит и возвращается, переходит на новую форму, что бы то ни было, форма всегда будет соответствовать последнему созданному значению, которое, в свою очередь, будет тем же, которое вы проверяли.
То, что вы предлагаете, может помочь, но все еще уязвимо в упомянутых вами способах. Зачем допускать какую-либо уязвимость?