まず第一に、安全で永続的なログインを維持することは一緒になりません。何らかの方法で永続的なログインを導入することにより、常にセキュリティを危険にさらすことになります。
そうは言っても、Charles Millerの記事では、そのようなシステムの概要を説明しています。
(十分な大きさの)ランダムキーを作成します。できれば、/dev/urandom
またはopenssl_random_pseudo_bytes()
を使用してアカウントに関連付けます(データベース用語では、ランダムキーをプライマリ(または一意の)インデックスとして、アカウントを外部キーとして持つ別のテーブル)。キーはCookieの値になります。
ログインしていないユーザーがCookieを提示すると、キーとアカウントが検索され、ユーザーがログインします。その後、使用されたキーが新しいランダムキーに置き換えられます(Cookieも更新されます)。
Cookieのみを介してログインしているユーザーは、機密(アカウント)情報にアクセスするときにパスワードの入力を再度求められる必要があります。
ユーザーには、すべてのデバイスからログアウトするオプションが必要です。
session_regenerate_id()
また、ユーザーがログインするたびに(フォームまたはCookieを介して)使用してセッションIDを更新することもお勧めします。これにより、誰かが他の誰かに対してセッション固定攻撃を開始し、場合によっては自分のIDを盗むことを防ぎます。
個人情報の盗難検出も処理できるBarryJaspenによるこの設計の改善点は、ここにあります。