Først, lad mig fortælle dig dette. Intet er 100% sikkert. Intet er lufttæt, og intet er helligt. Hvis den er motiveret nok, vil en angriber bryde ethvert forsvar på serversiden, du kan sætte (medmindre du bruger HTTPS, hvilket er en anden historie).
Du kan bruge cookies, men cookies er meget eksponerede og lette at ændre. Gem aldrig private data eller adgangsniveauer i en cookie. Da det nemt bliver stjålet/ændret af en angriber.
Sessioner er heller ikke 100 % sikre. Sessions-id'et, som serveren bruger til at identificere klienten, sendes på en af 2 måder. en $_GET variabel (dårlig) eller en cookie (bedre, men stadig ret dårlig). Det betyder, at hvis du er logget ind som administrator, over et usikret WiFi, kan en dygtig angriber (og med dygtig mener jeg en pr0 haxx0r, der downloadede en simpel HTTP sniffer) nemt stjæle dit SESSION ID. Og selvom du ikke får din adgangskode, vil serveren fejlagtigt identificere angriberen som dig og give ham enhver adgang, du måtte have/havde.
Så hvad skal man gøre? Sessioner er i de fleste tilfælde sikre. Råd til dine brugere om ikke at logge ind under et usikret netværk (busser, internetcaféer osv.). Hvis du vil tillade, at din brugerautorisation bevarer over tid, er en cookie påkrævet. Jeg bruger normalt et 2 cookie-system, hvis jeg har brug for det:
userid=12345
hash=password_hash($userid . $hashed_password, PASSWORD_DEFAULT)
Så har jeg noget at matche med, og brugerens detaljer blev ikke afsløret.
Men som sagt, i sidste ende, hvis du virkelig VIRKELIG ønskede at sikre dine brugere, over for alt andet skrevet i dette svar, så skaf dig HTTPS.