2010-10-03 58 views
0

因为我的登录无法正常工作我正在使用PHP和JavaScript来做到这一点。我的登录不起作用,我不明白为什么? [请帮助]

PHP:

$users = sql("SELECT * FROM USERS WHERE SITE_ID='${CONFIG["ID"]}'"); 
if($_REQUEST["logindata"]){ 
    $logindata = $_REQUEST["logindata"]; 
    $now = array_shift(explode(" ",microtime())); 
    if($_REQUEST["time"] < strtotime("+10 sec",$now) && $_REQUEST["time"] > strtotime("-10 sec",$now)) 
     exit(json_encode(array("TYPE"=>"FUNCTION","FUNCTION"=>"(\$login.failed(\"Time out for this request.. (Go away bots)\"))"))); 
    foreach($users as $user){ 
     if(hash_hmac("sha1",$user["LOGIN_SALT"],hash_hmac("sha1",$_SERVER["REMOTE_ADDR"],$_REQUEST["time"])) == $logindata){ 
      $_SESSION = $user; 
      $_SESSION["ACTIVE_IP"] = $IP; 
      sql("UPDATE USERS SET ACTIVE_IP='${IP}' WHERE LOGIN_SALT='${user["LOGIN_SALT"]}'",0); 
      $result = json_encode(array("TYPE"=>"FUNCTION","FUNCTION"=>"(\$login.success())")); 
     } 
    } 
    !$result ? $result = json_encode(array("TYPE"=>"FUNCTION","FUNCTION"=>"(\$login.failed())")) : void; 
} 

的JavaScript:

login: (function() { 
     $("#ajax_loading").fadeIn("fast"); 
     $("[type=submit]").fadeOut("fast"); 
     $tmp.time = "" + (new Date()).valueOf(); 
     return $functions.request({ 
      type: "plugin", 
      plugin: "login", 
      time: $tmp.time, 
      logindata: $.sha1($.sha1($.sha1($("#username").val(),$("#password").val()),$client.domain),$.sha1($client.IP,$tmp.time)) 
     }); 
    }), 

的$ .sha1功能,如果一个字符串赋予它是它的SHA1和如果两个它会给一个HMAC_SHA1结果。

+0

多少用户你期望吗? – 2010-10-03 19:04:44

+0

很多,这将是一个有很多人注册和记录它的服务..该服务是一个网站生成器.. – 2010-10-20 10:08:25

回答

6

首先:看看时间和比较它们。

(new Date()).valueOf(); 

- 将会给你微秒,而

array_pop(explode(" ",microtime())); 

- 将会只返回秒。 所以你的比较永远不会匹配。

但是,比较客户端时间和服务器时间并不是一个好主意,因为您认为两者具有相同的正确时间设置,并且位于相同的时区。

如果你真的很喜欢做对比,提供在开始服务器端时间戳的JavaScript,并提交经过该时间戳秒前添加,并以此作为$ tmp.time

但是你会做,像时间,域名或IP这样的东西几乎是无用的,如果你发送它们,而它们不可靠并且可以很容易伪造。

什么呢:你更好地利用哈希你的DBMS可以处理它自己的,所以你可以你喜欢直接与查询发现和不必须遍历所有用户获取1个用户

+0

我曾想过,但然后我将不得不包括纯文本的用户名,除非你有另一种方法..编码与用户匹配的一次性密钥仍然会有一个循环。 – 2010-10-20 09:08:34

+0

固定时间..仍然不会登录。 – 2010-10-20 10:07:11

相关问题