Po pierwsze, powiem ci to. Nic nie jest w 100% bezpieczne. Nic nie jest hermetyczne i nic nie jest święte. Jeśli jest wystarczająco zmotywowany, atakujący złamie każdą obronę po stronie serwera, jaką możesz zastosować (chyba że używasz HTTPS, co jest inną historią).
Możesz używać plików cookie, ale pliki cookie są wysoce widoczne i łatwe do modyfikacji. Nigdy nie przechowuj prywatnych danych ani poziomów dostępu w pliku cookie. Ponieważ jest łatwo skradziony/zmodyfikowany przez atakującego.
Sesje też nie są w 100% bezpieczne. Identyfikator sesji, za pomocą którego serwer identyfikuje klienta, wysyłany jest na jeden z 2 sposobów. zmienna $_GET (zła) lub ciasteczko (lepsze, ale nadal bardzo złe). Oznacza to, że jeśli jesteś zalogowany jako administrator, przez niezabezpieczone Wi-Fi, wykwalifikowany napastnik (a przez wykwalifikowanego mam na myśli pr0 haxx0r, który pobrał prosty sniffer HTTP) może łatwo ukraść Twój identyfikator sesji. I chociaż nie otrzyma Twojego hasła, serwer błędnie zidentyfikuje atakującego jako Ciebie i przyzna mu dostęp, który możesz mieć/miałeś.
Więc co robić? Sesje są w większości przypadków bezpieczne. Poradź swoim użytkownikom, aby nie logowali się w niezabezpieczonej sieci (autobusy, kafejki internetowe itp.). Jeśli chcesz, aby autoryzacja użytkownika trwała w czasie, wymagany jest plik cookie. Zwykle używam systemu 2 plików cookie, jeśli tego potrzebuję:
userid=12345
hash=password_hash($userid . $hashed_password, PASSWORD_DEFAULT)
Wtedy mam coś do dopasowania, a dane użytkownika nie zostały ujawnione.
Ale tak jak powiedziałem, pod koniec dnia, jeśli naprawdę NAPRAWDĘ chcesz zabezpieczyć swoich użytkowników, powyżej wszystkiego, co napisano w tej odpowiedzi, zdobądź HTTPS.