En época de Messenger, la gente podía bloquear la cuenta de otros mediante un intento masivo de contraseñas incorrectas lo cual hacia que Hotmail (y por ende Messenger) bloquease la cuenta durante X tiempo y no había forma de quitarlo ni siquiera para el usuario real salvo contactar con soporte de Microsoft xD
Está bien implementar un anti-bruteforce, siempre que el usuario real tenga la posibilidad de saltárselo en caso de que se haya activado. 40 intentos me parece un poco excesivo. Normalmente se trabaja sobre 10 como mucho. Al fin y al cabo son X contraseñas que pueden probar cada Y horas, si pones 40 cada 6, quiere decir que van a poder probar 160 contraseñas cada 24 horas. Eso hay que intentar reducirlo al máximo.
Desde luego, no lo implementes ni por sesión ni por cookies. Impleméntalo a nivel de base de datos. De nada te sirve que el atacante borre las cookies (en el que también se borra la sesión) y se salte el límite.
De todos modos, lo que se hace hoy en día es autentificación en 2 pasos. Ahí aunque la contraseña se vea comprometida, solo el usuario con código 2FA puede acceder.
https://es.wikipedia.org/wiki/Autenticaci%C3%B3n_de_m%C3%BAltiples_factores
Saludos