Dit spørgsmål er noget diffust og kræver et bredt svar.
MD5 anses ikke længere som værende en tilstrækkelig hashing for at gemme kodeord; rainbow tables har gjort at MD5 (alene) ikke er svært at 'dekryptere'. Som minimum anses det også for at være god/sikker praksis at salte sine kodeord. En anden hashing (såsom SHA1/SHA256/SHA512) er også bedre at anvende som hash til saltede kodeord.
Med hensyn dine punkter fra 2 til 4, så kan jeg ikke se hvad det har med spørgsmålet om sikkerhed at gøre - du beskriver egentlig bare en fremgangsmåde du ønsker at anvende. Om du vil 'sende folk væk' fordi begge felter ikke er udfyldt eller om du vil vise en fejlbesked højner ikke dit sikkerhedsniveau - det er udelukkende et spørgsmål om brugervenlighed. Og det undrer mig du rent faktisk bliver nød til at tage højde for, i login processen, om der hentes et eller flere match i databasen på det forespurgte brugernavn og kodeord; du lægger her op til at man godt kan oprette to (eller flere) identiske brugere, men du kan kun logge ind, hvis der kun findes en?
Personligt ser jeg ikke nogen grund til at gemme andet end brugerens ID i en session. Jo flere oplysninger du gemmer i din session, jo mere sårbar er dine data ved session hijacking (som i praksis er sværere at udføre end diverse guides og tutorials på nettet fremstiller det som).
Og som #1 er inde på er dit login ikke stærkere end det du bygger udenom det - du skal vide hvordan du beskytter dig mod SQL injections, da det er et ret hyppigt og endda nemt udførligt angreb.
Jeg har udviklet et simpelt brugersystem som egentlig er til brug for simpel implementering.
Beskrivelse af projektet kan ses her:
http://cc.err0r.dk/ss/Dokumentation for objektets metoder og medlemmer kan ses her:
http://cc.err0r.dk/ss/reference.htmlHvis projektet har interesse kan det downloades her:
http://cc.err0r.dk/ss/simpleusers.zipDet kan eventuelt lede dig i en retning som du kan udvikle efter.