まず、これを教えてください。100% 安全なものはありません。気密なものはなく、神聖なものはありません。十分な動機があれば、攻撃者はサーバー側の防御をすべて破ります (HTTPS を使用している場合を除きますが、これは別の話です)。
Cookie を使用することはできますが、Cookie は非常に公開されており、簡単に変更できます。個人データやアクセス レベルを Cookie に保存しないでください。攻撃者によって簡単に盗まれたり変更されたりするため。
セッションも 100% 安全ではありません。サーバーがクライアントを識別するために使用するセッション ID は、2 つの方法のいずれかで送信されます。$_GET 変数 (悪い)、または Cookie (より良いが、それでもかなり悪い)。つまり、セキュリティで保護されていない WiFi 経由で管理者としてログインしている場合、熟練した攻撃者 (つまり、単純な HTTP スニファーをダウンロードした pr0 haxx0r を意味します) は、SESSION ID を簡単に盗むことができます。また、パスワードを取得していない間、サーバーは攻撃者をあなたとして誤って識別し、あなたが持っている/持っていた可能性のあるアクセスを彼に許可します.
じゃあ何をすればいいの?ほとんどの場合、セッションは安全です。セキュリティで保護されていないネットワーク (バス、インターネット カフェなど) でログインしないようにユーザーにアドバイスします。ユーザー認証を長期間維持したい場合は、Cookie が必要です。必要に応じて、通常は 2 つの Cookie システムを使用します。
userid=12345
hash=password_hash($userid . $hashed_password, PASSWORD_DEFAULT)
次に、照合するものがありますが、ユーザーの詳細は明らかにされていません。
しかし、私が言ったように、結局のところ、本当にユーザーを保護したいのであれば、この回答に書かれている他のすべてのものに加えて、HTTPS を取得してください。