2014-05-14 3 views
2

당신이 전화를 걸면 간단한 로그인을하려고합니다. 나는 MySQLi를 사용하고 있으며 지금까지는 좋아 보인다.password_verify() 대체? - PHP

<?php 
    ob_start(); 

    $myusername = @$_POST['username']; 
    $mypassword = @$_POST['password']; 

    if (isset($_POST['logged'])) { 
     $link->escape_string($myusername); 
     $link->escape_string($mypassword); 
     $stmt = $link->prepare("SELECT * FROM members WHERE username=?") or die ($link->error); 
     $stmt->bind_param('s', $myusername); 
     $stmt->execute() or die($stmt->error); 
     $stmt->store_result(); 
     $count = $stmt->num_rows(); 

     if (!empty($myusername) && !empty($mypassword)) { 
      if($count == 1) { 
       $rs = $link->query("SELECT * FROM members WHERE username='$myusername'"); 
       $row = $rs->fetch_array(MYSQLI_ASSOC); 
       if (password_verify($mypassword, $row['password'])) { 
        $_SESSION['username'] = $myusername; 
        $_SESSION['first_name'] = $row['first_name']; 
        $_SESSION['last_name'] = $row['last_name']; 
        $_SESSION['email'] = $row['email']; 
        $_SESSION['loggedIn'] = true; 
        header("Location: login.php"); 
       } 
       else { 
        echo "<p style=\"color: red\">Wrong Password</p>"; 
       } 
      } 
      else { 
       echo "<p style=\"color: red\">Wrong Username</p>"; 
      } 
     } 
     else { 
      echo "<p style=\"color: red\">Fill in all fields</p>"; 
     } 
    } 
?> 

그것은 로컬 호스트에서 잘 작동하지만, 슬프게도 나는 로그인 버튼을 누를 때마다, 형태가 사라지고 내가 아무것도 남아있어 때문에 내 도메인에서 작동하지 않습니다. 도메인 공급자에게 연락하여 제 코드에 뭔가있을 수 있다고 말했습니다. localhost 서버에서 작동하므로 내 코드가 좋다는 것을 확신합니다.

번거 로움을 줄이기 위해 대안을 사용할 수 있을지도 모른다고 생각했습니다. 하지만 나는 데이터베이스에 암호를 저장하기 위해 crypt()을 사용하고 있다는 것을 기억하고 있으며, 나는 그것들이 무작위로 생성된다고 생각한다. 사용자가 입력 한 내용의 암호화 된 버전이 데이터베이스의 내용과 일치하는지 확인하는 다른 방법이 있습니까?

+2

'password_verify()'만이 avai입니다. PHP 5.5를 지원합니다. 호스팅 회사에서 아직 버전을 설치하지 않은 경우 코드가 '정의되지 않은 함수'오류로 인해 충돌하고 빈 흰색 화면이 표시됩니다. –

+1

PHP 함수가 아닌'escape_string'은 정확히 무엇입니까? – Daan

답변

7

password_verify은 PHP> = 5.5.0에서 사용할 수 있으므로 호스팅에 필수 PHP 버전이 없을 수 있습니다.

참조 : http://docs.php.net/manual/en/function.password-verify.php

당신은 이런 식으로 뭔가를 시도 할 수 :

crypt($row['password'], $mypassword) == $mypassword 
+0

흠 .. 사용자 이름과 암호가 123 인 더미 계정을 만들었고 사용자를 입력하고 패스 할 때 '잘못된 암호'가 표시되었습니다. – user3636645

+0

Nevermind, '== $ mypassword'를 제거하고 $ row [ 'password'] var를 $ mypassword var로 전환했습니다. – user3636645

+0

그래서, 효과가 있었습니까? – Marian

6

password_hash과 그 동반자 password_verify은 PHP> = 5.5

에서 사용할 수 있습니다하지만 호환성 라이브러리/백 포트가 있음 PHP> = 5.3.10에서 사용할 수있게합니다. https://github.com/ircmaxell/password_compat

+0

너와 ircmaxell이 내 엉덩이를 구해 줬어, 고마워. – Yehonatan