0

管理者が管理者パネルを介してユーザーのWebサイトへのアカウントアクセスを(ログイン後に)一時停止できるアプリケーションをPHPで作成しようとしています。ユーザーテーブルのSessionという名前の列を使用して、現在のセッションIDを保存し、現在のセッションIDとデータベース値(ログイン時に保存される)と一致させていますが、管理者がアクセスを一時停止したため空白になりました。以下は私のコードです。誰かが同じことをするのを手伝ってくれますが、実際には機能していません。私はAJAXとPHPを使用しています。

var currentSessionValue = <?php echo $myDB->get(USERS,'session','id='.$_SESSION['UserId']); ?>;
// pseudo code
setInterval(checkVariableValue, 5000);
function checkVariableValue() {
    alert(currentSessionValue);
     $.ajax({
        url: 'checkLoginStatus.php',
        success: function(newVal) {
            if (newVal == currentSessionValue);
                alert('You are Logged out by Administrator.');
                window.setTimeout('location.reload()', 1000);
            }
     });
}
4

2 に答える 2

0

ログインしているユーザーごとに 5 秒ごとにデータベース呼び出しを行うのは、悪い考えのように思えます。予想されるユーザー数によっては、パフォーマンスが大幅に低下する可能性があります。

代わりに、ユーザーがサーバーにヒットする何かを実際に実行しようとするたびに、データベースをチェックすることをお勧めします。したがって、ユーザーが別のページに移動するたび、または AJAX を介してコンテンツが読み込まれるたびに、このチェックを実行できます。

セッションIDで何をしているのかわかりませんが、とにかくデータベースにアクセスする場合は、usersテーブルに余分な列を保存してみませんか(それか何かを呼び出しますsuspended)かどうかのステータスを保持しますユーザーのアクセスが停止されていませんか?

その列が に設定されている場合0、それらは良好です。ただし、 に設定されている場合1は、ユーザーをログアウトし、再度ログインさせないようにします (またはログインはあなた次第です)。

再ログインを拒否したくない場合は、ログアウトする0前、または再ログインしたときに値を元に戻してください。

于 2012-08-29T20:06:48.657 に答える
0

あなたが書きたかった可能性はありますか:

if (newVal == currentSessionValue) {

それ以外の

if (newVal == currentSessionValue);

代わりに使いたいと思ったこともあると思いますnewVal != currentSessionValue...

于 2012-08-29T20:18:00.823 に答える