Ben kendi sistemimi anlatayım.
Zaten standart olan bir çok şeyi yapmışsınız.
Ama yaptıklarınız sql injection ve brutte force için işe yarar.
Ben bunun üzerine session çalmaya karşı şu yöntemi kullanıyorum.
Kullanıcı girişinde $_SESSION değerine ip adresi, browser bilgisinin md5 li halini yazıyorum. Ve her sayfa sorgulamada browser ve ip nin teyitini yapıyorum, eğer browser ya da ip adresi değişirse log out yapıyorum. Bir de ek olarak timeout diye bir session tutuyorum, aralıksız 10 dakika işlem yapmazsa logout yapıyorum, 10 dakika içindeki her sayfa yenilemede timeout u 10 dakika ileriye öteliyorum.
Bunun dışında girişte ülke ya da şehir ile ilgili bir geolocation bilgisi alınıp veritabanında tutulabilir. Aynı gün içinde değişik ülke veya şehirlerden giriş yapıldığında hesap askıya alınabilir.