1

ユーザーが私のサイトにログインすると、すべてのユーザー情報を取得し、それを というセッションに保存しuser_infoます。これは、ほぼすべてのページで必要となるユーザーに関する共通情報を取得するために、継続的にデータベースを検索する必要がないようにするためです。var がダンプされると、ユーザー情報セッションは次のようになります。

array(17) {
  ["user_id"]=>
  string(7) "1165771"
  ["username"]=>
  string(2) "Jake"
  ["who"]=>
  string(1) "1"
  ["seeking"]=>
  string(1) "2"
  ["orientation"]=>
  string(1) "1"
  ["dob"]=>
  string(10) "1985-07-08"
  ["zip"]=>
  string(5) "25140"
  ["email"]=>
  string(17) "foo@bar.com"
  ["account_status"]=>
  string(1) "1"
  ["role"]=>
  string(1) "1"
  ["paused"]=>
  string(1) "0"
  ["latitude"]=>
  string(11) "37.89955100"
  ["longitude"]=>
  string(12) "-81.52641100"
  ["region"]=>
  string(2) "WV"
  ["city"]=>
  string(5) "NAOMA"
  ["avatar"]=>
  string(21) "1165771_50c6816a8fad1"
  ["email_setting"]=>
  string(1) "1"
}

現在、ユーザーが情報の一部を更新できる「アカウント設定」ページがあります。したがって、たとえばユーザー名を変更した場合、これを実行してセッションを更新し、新しい値が含まれるようにします。

$_SESSION['user_info']['username'] = 'NEW VALUE';

ここで問題です。管理パネルでモデレートしているときにユーザーを禁止すると、そのユーザーのアカウント ステータスがデータベースで 1 (アクティブを意味する) から 2 (禁止を意味する) に更新されます。ただし、この変更を user_info セッションに反映させるために、これを行うことはできません。

$_SESSION['user_info']['account_status'] = 2;

コンピューター上のユーザーのセッションではなく、コンピューター上のユーザー情報のみを更新するためです。技術的に禁止されていても、ログアウトして再度ログインを試みるまで、引き続きサイトを使用できます。

ログイン SQL クエリが true を返すには、資格情報を正しく取得するだけでなく、ユーザーのアカウント ステータスも 1 である必要があるため、ユーザーはエントリできません。

質問

  1. アカウントに変更を加えたときに、個々のユーザーのセッションを更新するにはどうすればよいですか?

  2. ユーザーのセッションをサーバーから完全に削除して、すぐにログアウトする方法。

4

4 に答える 4

0

(直接切断する代わりに)別の解決策は、セッションにタイムスタンプを追加し、xx分ごとに更新することです(セッションデータがxx分より古い場合は、dbクエリを実行します)。

そうすれば、ブロックされたユーザーがすぐに追い出されることはありませんが、時間を制御し、データベースクエリの数を減らすことができます(すべての要求ではなく、xx分ごと)。

ただし、最初に、ユーザーデータベースへのクエリが本当に大きな影響を与えるかどうかを確認します。

于 2012-12-13T02:35:36.750 に答える
0

この変更をすぐに有効にする必要がある場合は、私の知る限り、各ページでユーザーのステータスを確認し、ユーザーが禁止されている場合は適切な措置を講じる必要があります。

この回答は、代わりにファイルを変更することを提案していますが、作成者でさえ推奨していません。

于 2012-12-13T02:29:11.163 に答える
0
How can I update the session of an individual user when I make a change to their account.

個人的には、データベース セッションに切り替えるだけです。コードの最初でデータベースを 1 回ポーリングして、すべてのユーザー データを変数に取得します。

このようにして、ページの変更中に管理者権限が変更された場合、ユーザーは即座に新しいアクセス レベルを取得します。

How I can delete a user's session completely from my server so they are immediately logged out.

また、データベースからセッションを「削除」して、ユーザーを強制的にログアウトさせることもできます。

于 2012-12-13T02:31:26.317 に答える
0

ページの読み込みごとにセッションのチェックを追加するだけです。たとえば、アクティブなセッションを一時的に書き込む db テーブルがあります。ユーザーがリロードし、テーブルにそのようなエントリがない場合、ユーザーは再度ログインしてセッションを書き直す必要があります。彼がログアウトするか、あなたが彼を追い出す必要がある場合は、エントリを削除または変更するだけです。これは古典的なツールにもなり得ます - 現在、sit3 ecc を使用しているユーザーは誰でも...

于 2012-12-13T02:32:22.897 に答える