1. Wymuszenia na ilość znaków czy rodzaj znaków w haśle są wyjątkowo irytujące - nie Twój, jako administratora interes jakie jest moje hasło. Lepiej podawaj na bieżąco podczas jego wpisywania jego "siłę", którą to już możesz sobie w dowolny sposób oszacować. Ale jak będę chciał założyć jakieś śmieciowe konto z hasłem "qwerty" to daj mi je założyć.
2. Jak już wspomniano: nie blokuj konta, a wymuszaj wpisanie jakiejś CAPTCHA-y - to znacznie wygodniejsze rozwiązanie dla użytkowników.
3. Składować najprawdopodobniej wystarczy podstawowe dane: datę i czas, IP, id użytkownika (jeżeli w ogóle istnieje) - o przechowywaniu adresu IP możesz poczytać tutaj:
http://forum.php.pl/index.php?showtopic=188630&hl=4.
Nigdy nie wyświetlaj hasła użytkownika (dotyczy to również pola typu
password), a już szczególnie na stronach niezabezpieczonych SSL-em. Jak już to dodaj opcję "[x] pokaż hasło", które przy pomocy JS zamieni pole typu
password na
text po stronie klienta.
5. Informacje o nieudanych logowaniach musisz przechowywać w bazie danych - może to być tabela przechowywana bezpośrednio w pamięci, w przypadku MySQL jest to typ HEAP / MEMORY. Sesje można bez problemu zrestartować dla każdego żądania. Ba! Trzeba zadać sobie nieco trudu by ją w ogóle podtrzymać, dlatego też większość takich robotów tego nawet nie próbuje robić.
6. Sam nagłówek
Location nie gwarantuje przekierowania, dlatego też po jego wystąpieniu powinieneś zawsze wyświetlić chociażby najprostszy dokument HTML w stylu:
...
Oraz zakończyć działanie skryptu -
exit.