여기 내 멍청이 머리를 찢어 버리고 있습니다. 왜 아래 코드가 작동하지 않는지 이해할 수 없습니다. 페이지가 올바르게로드되지만 데이터베이스에있는 사용자 이름과 암호로 로그인하려고하면 로그 아웃 단추를 실제로보고 싶을 때 페이지가 로그인 양식으로 원래 상태로 다시로드됩니다. 또한 소금과 해시가없는 암호를 데이터베이스에서 무분별하고 무질서한 암호와 비교해 보았습니다. 작동 안함.비밀번호 확인 로그인하지 않습니다. 로그인 페이지를 다시 불러옵니다.
유일한 경고는 입니다. "시스템의 시간대 설정에 의존하는 것은 안전하지 않습니다.", 나는 암호 검증 기능과 관련이 없다고 생각합니다.
는페이지는이처럼 시작합니다
session_start();
error_reporting(-1); ini_set('display_errors', 'On');
그런 다음 약간의 HTML을 따른다. 그런 다음 :
if (isset($_POST['log_out'])) {
session_unset();
session_destroy();
$_SESSION = array();
}
로그 아웃 버튼을 누르면, $_POST['log_out']
을 설정합니다.
function mysql_fix_string($string) {
if (get_magic_quotes_gpc()) $string = stripslashes($string);
$string = htmlspecialchars($string, ENT_QUOTES);
$string = mysql_real_escape_string($string);
return $string;
}
그런 다음 사용자가 동일한 페이지로 다시 (이 게시물 로그인 양식을 제출 한 경우에만 실행해야 암호 검증 부분을, 제공 : 그런 다음 SQL 주입을 방지하기 위해 사용 나는이 책에서 가져온 기능이 온다 따라서) $_POST['username']
및 $_POST['password']
설정 :
if (isset($_POST['username']) && isset($_POST['password'])) {
$salt1 = 'how';
$salt2 = 'pony';
$password = md5($salt1 . $_POST['password'] . $salt2);
$db_hostname = 'xxxxxxxxx';
$db_username = 'xxxxxxxxx';
$db_password = 'xxxxxxxxx';
$db_database = 'xxxxxxxxx';
$db_server = mysql_connect($db_hostname, $db_username, $db_password);
if (!$db_server) die("Unable to connect to MySQL: " . mysql_error());
mysql_select_db($db_database)
or die("Unable to select database: " . mysql_error());
$username = mysql_fix_string($_POST['username']);
$query = "SELECT password FROM users WHERE name = '" . $username . "'";
$result = mysql_fetch_assoc($query);
$passwordindatabase = $result['password'];
if ($password == $passwordindatabase) {
$_SESSION['logged_in'] = true;
$_SESSION['user'] = $username;
unset($_POST['username']);
unset($_POST['password']);
}
}
비트는 상기 다운 로그인 폼 만 if ($_SESSION['logged_in'] != true)
보여 온다. 입력란 username
및 password
의 값을 $_SERVER['REQUEST_URI']
(동일한 페이지)에 게시합니다.
$ passwordindatabase 및 $ password의 var_dump()를 제공 할 수 있습니까? 실제로 일치하는지 확인하려면? – Bono
의견을 보내 주셔서 감사합니다. 사실 $ password는 예상대로 string (32) "a18c15de5dbeb62f3bb78d4212bcc3b8"이지만 $ passwordindatabase는 NULL입니다. 분명 여기에 문제가 있습니다. – Johanna
사용중인 사용자가 데이터베이스에 있는지 확인하십시오? 또한 $ username과 $ _POST [ 'username']가 일치합니까? 그 전체 mysql_fix_string()은 당신이 의도했던 것을 망칠 수도 있습니다. ** 편집 ** 또한 SQL 문에서 참조하는 테이블과 필드가 올바른지 확인하십시오. – Bono