Tā, pirmais ko pamanīju - netiek nodrošināta aizsardzība pret sql injekciju.
Visus mainīgos ko bāz kvērijā, vajag eskeipot ar mysql_real_escape_string() funkciju.
Otrais, kam tev vēl vajadzīgi kūkiji, ja izmanto sesijas?
Trešais, varētu uztaisīt papildus sesijas mainīgo kurš saturētu, teiksim, md5($_SERVER['REMOTE_ADDR'] . $_SERVER['user_agent'])
Un katru reizi pārbaudīt, vai tā konkrētā sesijas mainīgā vertība sakrīt ar reālajiem datiem.
Tas tādam gadījumam, ja kāds nosper sesijas identifikatoru, tu pārbaudi un secini ka nesakrīt ip vai user_agent un neļauj autorizēties atkārtoti...
if($logged_in){
if(md5($ip . $user_agent) != $_SESSION['user_hash']){
//sesija zagta
logout();
}
}