2014-02-19 36 views
0

我在做一個小小的服務器端項目,我需要使用存儲在數據庫中的會話標識來檢查是否設置了會話變量。使用ID檢查會話數據,並在循環內更改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); 
} 

回答

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