使用id检查会话数据,并在循环中更改id

时间:2014-02-19 23:23:08

标签: php mysql session

我正在做一个小的服务器端项目,我需要使用存储在我的数据库中的会话ID来检查是否设置了会话变量。

我遇到的问题是,在检查变量是否设置后,我不想破坏会话。所以我需要一种方法来检查变量而不必启动会话,或者在会话启动时找到更改为不同会话ID的方法, 或者将会话复制到我可以销毁的其他会话。

这就是我所拥有的:

while(true) {
    $stmt=$db->prepare("SELECT sessionid FROM sessions");
    $stmt->execute();
    while($row=$stmt->fetch(PDO::FETCH_ASSOC) {
        session_id($row['sessionid']);
        session_start();
        if(!isset($_SESSION['value'])) {
            $stmt=$db->prepare("DELETE FROM sessions WHERE sessionid=:sessionid");
            $stmt->bindValue(':sessionid',$row['sessionid'],PDO::PARAM_STR);
            $stmt->execute();
        }
        session_destroy();
    }
    sleep(5);
}

1 个答案:

答案 0 :(得分:0)

完成它大声笑......

while(true) {
    $stmt=$db->prepare("SELECT sessionid FROM sessions");
    $stmt->execute();
    while($row=$stmt->fetch(PDO::FETCH_ASSOC) {
        session_id($row['sessionid']);
        session_start();
        session_regenerate_id(false);
        $newsessionid=session_id();
        session_write_close();
        session_id($newsessionid);
        session_start();
        if(!isset($_SESSION['value'])) {
            $stmt=$db->prepare("DELETE FROM sessions WHERE sessionid=:sessionid");
            $stmt->bindValue(':sessionid',$row['sessionid'],PDO::PARAM_STR);
            $stmt->execute();
        }
        session_destroy();
    }
    sleep(5);
}

参考:http://uk1.php.net/manual/en/function.session-regenerate-id.php