0

我正在尝试在 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

为每个登录的用户每五秒调用一次数据库似乎是个坏主意。根据您希望拥有的用户数量,这可能会导致性能受到重大影响。

相反,每当您的用户实际尝试执行任何影响服务器的操作时,检查数据库可能是一个更好的主意。因此,每次他们转到不同的页面或每次通过 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 回答