2010-10-03 57 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

相關問題