Първо, нека ви кажа това. Нищо не е 100% сигурно. Нищо не е херметично и нищо не е свято. Ако е достатъчно мотивиран, нападателят ще наруши всяка защита от страна на сървъра, която може да поставите (освен ако не използвате HTTPS, което е различна история).
Може да използвате бисквитки, но бисквитките са силно изложени и лесно се променят. Никога не съхранявайте лични данни или нива на достъп в бисквитка. Тъй като е лесно откраднат/променен от нападател.
Сесиите също не са 100% безопасни. Идентификаторът на сесията, който сървърът използва за идентифициране на клиента, се изпраща по един от 2 начина. променлива $_GET (лоша) или бисквитка (по-добра, но все пак доста лоша). Това означава, че ако сте влезли като администратор, през незащитен WiFi, опитен нападател (и под квалифициран имам предвид pr0 haxx0r, който е изтеглил обикновен HTTP снифер) може лесно да открадне вашия идентификационен номер на SESSION. И докато не получи паролата ви, сървърът ще идентифицира погрешно нападателя като вас и ще му предостави всеки достъп, който може да имате/имал.
И така, какво да правя? В повечето случаи сесиите са безопасни. Посъветвайте потребителите си да не влизат в незащитена мрежа (автобуси, интернет кафенета и др.). Ако искате да позволите на вашето потребителско оторизиране да продължи с течение на времето, е необходима бисквитка. Обикновено използвам система с 2 бисквитки, ако имам нужда от това:
userid=12345
hash=password_hash($userid . $hashed_password, PASSWORD_DEFAULT)
Тогава имам какво да съпоставям и данните за потребителя не бяха разкрити.
Но както казах, в крайна сметка, ако наистина НАИСТИНА искате да защитите потребителите си, по-горе към всичко останало, написано в този отговор, вземете си HTTPS.