これらの原則に基づいて構築された永続的なログインアプリケーションを構築しました(From:http: //jaspan.com/improved_persistent_login_cookie_best_practice)
- ユーザーがRememberMeをオンにして正常にログインすると、標準のセッション管理Cookieに加えてログインCookieが発行されます。[2]
- ログインCookieには、ユーザーのユーザー名、シリーズID、およびトークンが含まれています。系列とトークンは、適切に大きなスペースからの推測できない乱数です。3つすべてがデータベーステーブルに一緒に保存されます。
- ログインしていないユーザーがサイトにアクセスしてログインCookieを提示すると、ユーザー名、シリーズ、およびトークンがデータベースで検索されます。
- トリプレットが存在する場合、ユーザーは認証されたと見なされます。使用されたトークンはデータベースから削除されます。新しいトークンが生成され、ユーザー名と同じシリーズIDでデータベースに保存され、3つすべてを含む新しいログインCookieがユーザーに発行されます。
- ユーザー名とシリーズが存在するがトークンが一致しない場合、盗難が想定されます。ユーザーは強い言葉で警告を受け取り、ユーザーが記憶しているセッションはすべて削除されます。
- ユーザー名とシリーズが存在しない場合、ログインCookieは無視されます。
最初の認証が成功した後、新しいトークンを再発行することを理解しています。しかし、その後、認証が必要な他のページでも、その永続的なCookieを引き続きチェックして、新しいトークンを再発行しますか?
または、最初の認証が成功した後、ユーザーにログイン済みのマークを付け、その時点からセッションによってのみ認証し、現在のセッションの有効期限が切れた後にユーザーがサイトにアクセスしようとしたときのために、最初に再発行されたCookieを保存しますか(つまり、閉じたブラウザなど)?