AJAX刷新脚本阻止会话



我使用刷新使用php/mysql创建了一个ajax聊天:

var Alive = setInterval(function(){ /*ajax*/ }, 5000);

它运行良好!但是,我正在寻找一种在同一时间预防2个会话的方法(例如,如果用户在桌面上连接,然后在不休假的情况下进行移动(,因为脚本将继续并刷新脚本的第一个会话。任何想法 ?也许取消/重定向较旧的会话?我不知道

当您的聊天使用身份验证时,您可以使用访问令牌。

用户登录时,创建一个新的令牌(例如,基于用户ID和当前时间戳的哈希(,然后将其存储到用户表和会话中的数据库中。($_SESSION['accessToken'] = $token(用户手动断开连接时将列设置为空。

现在,每次服务器收到请求时,请检查令牌。如果会话一匹配数据库一个,则可以,否则用户从其他地方登录或在此期间关闭了他的浏览器。在这种情况下,调用您的断开函数。

真正确定用户保持不变,也可以在每个请求下生成新的令牌。

您可以使用类似的东西检查令牌是否匹配:

    $db = getDB();
    $query = $db->prepare('SELECT 1 FROM users WHERE email=:email AND access_token=:accessToken;');
    $query->execute([
            "email"         => $_SESSION["email"], /* Assuming you store the user's info into the session when he logs in */
            "accessToken"   => $_SESSION["accessToken"]
    ]);
    if($query->rowCount()) {
        //The user didn't change device/browser
        $query->closeCursor();
        $_SESSION["accessToken"] = generateAccessToken($_SESSION["email"]);
        //Don't forget to update the token in the database too
    } else {
        //The user changed device/browser without disconnecting manually
        $query->closeCursor();
        disconnectUser(); //Destroys the session and sets the access token to null
    }

现在,用户已断开连接,您可以使用403禁止的HTTP状态代码响应。收到403状态时,请阻止您的脚本循环。

最新更新