ユーザーがサイトで正常に認証されると、ユーザー ID をセッションに保存します。$_SESSION['user_id']
次に、これをサイト全体で使用して、ユーザーが特定のアクションを実行できるかどうかを確認します。例えば
if(isset($_SESSION['user_id'])){
//User is logged in, allow the following.
...
}
...
if ( $_SESSION['user_id'] == $comment_user ) {
//User owns the comment, go ahead and delete it.
...
}
ただし、サインインしたユーザーが悪意のある目的を持っていることを発見した場合、これらの安全なアクションを実行できないようにするにはどうすればログイン セッションを強制終了できますか?
ユーザーをブロックするには、データベースでログインの詳細を無効にするか、認証時にチェックされるブロックリストに追加して、認証できないようにします。ただし、これは次回のログイン試行時にのみ有効です。現在のセッションがアクティブなままであり、ユーザー ID がセッションに保存されている限り、認証されたと見なされます。
- ログアウトを強制して、特定のセッションの設定を解除する方法はありますか? どのように?
- そうでない場合、ブロックされたユーザーが引き続きサイトの安全な領域にアクセスできないようにする最善の方法は何ですか? たとえば、私の唯一のアイデアは、単にチェックするのではなく
if(isset($_SESSION['user_id']))
、追加のチェックを追加して、user_id がデータベースの「ブロックされたユーザー」リストに追加されていないことを確認することです。ユーザーが何らかのアクションを実行するたびに、ユーザーがブロックされたリストにアクセスしたかどうかを確認するために別の db リクエストが行われるのが好きではありません。特に、ユーザーをブロックすることはめったにないためです。データベースにアクセスせずにユーザーがブロックされているかどうかを確認する方法はありますか?
ありがとう!
編集
これまでのほとんどの回答は、セッションの設定を解除/破棄する方法、またはユーザーが次のログイン試行をブロックする方法に対処しています。残っている唯一の質問は、現在ログインしているユーザーがブロックされているかどうかを確認する方法だと思います。ユーザーが実行するたびに「ブロックされたユーザー」リストを確認するためにDBに行かずにこれを行う方法はありますか?行動。これは、上記の太字のイタリック体である私の主な問題に関連しています。ユーザーがブロックされている場合は、すぐにセッションを破棄して (ログアウトを強制する)、再度認証することもできなくなります。