Так…
Попробую привести usecase.
1. Предположим ты админ сайта на джанге (сайт назовем coolsite.com). Ты сейчас залогинен в админку. В браузере (именно в браузере! без всякого curlа!). Следовательно у тебя открыта сессия. И следовательно у тебя стоит кука с session_id.
2. Я тебе кидаю ссылку на страницу со своим сайтом (badsite.biz). Ты переходишь на страницу. Там голы бабы и можно даже сказачать мп3 бесплатно!
3. Но на странице есть скрытая форма типа
<form action="http://coolsite.com/admin/auth/users/delete/" method="post">
<input type="hidden" name="id" value="1" />
</form>
Дисклаймер: Пример надуманный. Никто не держит админку по дефолтному урлу и на удаление, админка джанги ещё переспросит конечно. Но я хотел показать саму мысль.4. И пока ты не закрыл страницу, жаваскрипт сабмитит эту форму.
5. Что делает браузер? Он шлёт тебе на сайт этот post запрос. А в куках твоя сессия. И этот запрос проходит аутентикацию. И удаляет пользователя.
А вот вариант с защитой:
1. Тебе твой сайт ставит дополнительную куку с токеном.
2. В каждую форму твоего сайта также вставляется этот токен.
3. Когда ты пришел ко мне на сайт, как моему скрипту сформировать форму, чтобы обойти защиту? Мне же надо вставить значение твоего текущего токена. Он есть в куке, но мой скрипт не имеет досуп к куке с другого домена.
С сессией ничего не связывается. В джанго csrf защита работает параллельно с сессиями. На сервере токен нигде НЕ хранится. Всё сделано именно на проверке равенства токенов в куке и в форме. И этого достаточно, как показано в примере выше.