Есть глубокий смысл в том, чтобы неоднократно требовать капчу при попытках ввода пароля, так как иначе робот сможет быстро-быстро подобрать пароль.
Скажем, если спрашивать только первый раз, то достаточно будет злоумышленнику один раз указать капчу, а затем оставить за себя робота подбирать пароль.
Он будет стирать cookies и смотреть на капчу. Потому что первый раз капча таки показывается. И перестает показываться только после правильного набора на время жизни сесси или до подозрительного поеведения (попытка брутфорса пароля, например).
В принципе вы могли не привязыватся конкретно к PHP, в ASP.NET тоже самое, либо кука, либо урл и в JAVA я думаю также. А суть тут в том, что этот самый Id находится в юрисдикции клиента, т.е. в данном случае бота — убил Id значит убил сессию.
Как я понял ветка началась с сообщения: «А вообще, чуть выше предложили идеальный вариант. Не показывать сразу капчу. Неправильно ввел пароль пару раз — вводи капчу.»
Если их хранить в базе — настоящему владельцу при попытке взлома придется вводить капчу. Или обнулять их через некоторое время. Тогда владелец возможно даже ничего не заметит.
Captcha и юзабилити