2013-04-04 53 views
0

我正面臨PHP響應的問題。我用了3秒延遲的Ajax來檢查用戶的日誌。當用戶帳戶與兩個用戶同時使用時,必須踢一個帳戶。我曾經跟蹤數據庫中的日誌ID,如果與會話相同。問題是即使沒有其他用戶使用他/她的帳戶,一些用戶也會被踢。我試圖print_r的查詢語句,它返回不同的值。這可能是其他用戶的迴應。PHP返回其他用戶請求的輸出

我使用IIS服務器和FastCGI進行PHP響應。

有人可以告訴我這是怎麼可能的,並給我想法來解決這個問題?謝謝。

下面是一些代碼:

檢查記錄在數據庫中使用Ajax:

public function CheckLogStatus($name, $email, $sess_code) { 

    $qry = "Select log from $this->tablename where name='$name' and email='$email'"; 
    //when I print this statement it returns different values of $name and $email 

    $result = mysql_query($qry) or die(mysql_error()); 

    if(!$selResult = mysql_fetch_array($result)) { 
     return false; 
    } 

    if(!isset($_SESSION)) { 
     session_start(); 
    } 

    if(!isset($selResult['log']) && $selResult['log'] != '') { 
     if($selResult['log'] != $sess_code) { 
      //$_SESSION['LOGS'] = 'USED'; 
      return false; 
     } 
    } 

    return true; 
} 
+0

Post teh codez pl0x – 2013-04-04 23:10:22

+0

沒有任何代碼,它很難幫助 – Yeak 2013-04-04 23:10:48

+0

+1,我想到的第一件事是你可能忘記在db中實現「註銷」。 – void 2013-04-04 23:11:19

回答

0
<?php 
session_start(); 
$_SESSION['LOG'] = $log; 
setcookie("Log",$log,time()*24*60*60); //expires after 24hrs 
?> 

的功能,你上面提到的CheckLogStatus是一樣的,

<?php 
public function CheckLogStatus($name, $email, $sess_code){ 
$qry = "Select log from $this->tablename where name='$name' and email='$email'"; 
$result = mysql_query($qry) or die(mysql_error()); 
if(!$selResult = mysql_fetch_array($result)){ 
return false; 
} 
if(!isset($_SESSION)){ session_start(); } 
if(!isset($selResult['log']) && $selResult['log'] != ''){ 

     if($selResult['log'] != $sess_code) { 
    return false; 
} 
} 

return true; 
} 
?> 

但同時通過,

<?php 
CheckLogStatus("Myname", "[email protected]", $_COOKIE['Log']); 
?> 
+0

檢查上面的答案,我剛剛添加了傳遞和獲取cookie的方法!而不是在數據庫更新!(希望你做得好) – 2013-04-04 23:49:47

+0

你也可以給一個資源或答案可以解釋爲什麼會話不好嗎? – 2013-04-04 23:57:55

+0

我不知道!但是cookie被存儲,所以即使在用戶關閉瀏覽器之後它仍然存在!但會話在用戶關閉他/她的瀏覽器時到期! – 2013-04-05 00:07:53