PHP アプリケーションのユーザー認証を作成しています。私のアプローチを批判してください:
ログインに成功したら、session_regenerate_id() を実行し、新しい session_id、user_id、および有効期限を db テーブルに保存します。そのユーザーの古いセッションも削除します。
応答内の各リンクまたはフォーム アクション URL には、token=jenjdf723jhfej (保存された session_id) のようなものが含まれます。
各リクエストは、データベースに保存されたセッションに対してチェックされます。トークンが有効なセッションと一致する場合、新しい session_id が生成され、データベースが更新されます。一致しない場合は、ログイン フォームを含めて終了します。したがって、トークンは 1 つのリクエストに対してのみ有効です。
このアプローチは安全ですか?
追加のチェックとして、リクエストのIPアドレスをデータベースに追加することを考えました。
優れた認証システムをお勧めいただければ、既存の認証システムを使用することにオープンです。
ありがとう
編集:私は実際にトークンを廃止し、有効なセッションのリストをphpセッションIDおよびその他の情報とともにデータベーステーブルに保存することにしました。リクエストをテーブルに対してチェックして、a) セッションの有効期限が切れていないこと、および b) ユーザーがログインしたのと同じ IP アドレスからリクエストが送信されたことを確認できます。
将来、使い捨てトークンを追加する可能性があります。その場合、おそらく次のようなもので生成します$token = md5(uniqid(rand(), true));
これは、この質問が有効でなくなったことを意味する場合がありますが、とにかくコメントをありがとう. モッズ/用務員、この質問であなたがしたいことをしてください。