Суть CSRF атаки в получении злоумышленником данных, которые позволят ему выдавать себя за другого человека. И все, что необходимо сделать для защиты, это генерировать при каждом запросе уникальный токен, естественно, с записью в базу или в текущую сессию, и при выполнении любого запроса сверять полученный токен и заменять его. Из этого следует, что токен нужно менять
при каждом действии пользователя, а не только при каждой авторизации.
Время хранения кук тут роли никакой не играет. Нажмет пользователь "запомнить меня", а вы установите ему куку на час?
Собственно, тут все довольно прозрачно, на мой взгляд. Возможно, я тоже чего-то упустил, в таком случае буду рад поправкам.
Get-запросы токенами защитить невозможно
Почему? Посылаете в get токен параметром, на сервере проверяете.