2013-04-04 32 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