PHP ログイン スクリプトのいくつかのエラーを修正する必要がありました. ユーザーが大文字でアカウントを作成した場合, すべて小文字でログインすることはできません. そこで修正することにしました. しかし, ログは記録されません.で、「予期しないエラーが発生しました」というメッセージでログインにリダイレクトされるだけです。
ユーザー名のチェックは通過しますが、パスワードは通過しません。また、パスワードが正しくありません。
新しいアカウントを作ろうとしました. それでもまだそのエラーページに行きます. でも今回は, 実際にログインしましたが, ではありません. ログインに成功しました. 既存のユーザーはログインできません. しかし, 新しいアカウントやらせました。
そして、パスワードのリセットを試みました。動作しますが、成功のログイン メッセージにはなりません。
私が行った他の変更は、パスワードのハッシュ化でした, ユーザー名パスワードソルトを使用しているため, からに変更し$hash = hash('sha256',$Username.$Password.$Salt);
まし$hash = hash('sha256',strtolower($Username).$Password.$Salt);
た, ユーザー名が大文字または小文字の場合, パスワードチェックに影響があった.
私のコード:
<?php
/* Mysql data */
$MysqlUsername = "root";
$MysqlPassword = "*********";
$MysqlHostname = "localhost";
$MysqlDatabase = "teamgamersnet";
$Salt = "******";
$Username = $_POST['Username'];
$Password = $_POST['Password'];
$Remember = $_POST['Remember'];
$Cookie = "TGN";
$IP = $_SERVER['REMOTE_ADDR'];
if (empty($Username) || empty($Password)) { die("Please fill in all the fields"); }
$hash = hash('sha256',strtolower($Username).$Password.$Salt);
$Sql = new mysqli($MysqlHostname, $MysqlUsername, $MysqlPassword, $MysqlDatabase);
if ($Sql->connect_error){ echo $Sql->connect_error; }
$sUser = $Sql->real_escape_string($Username);
$sPass = $Sql->real_escape_string($Password);
$xPass = $Sql->real_escape_string($hash);
$CheckUser = $Sql->query("SELECT Username FROM `users` WHERE `Username` = '".$sUser."'");
$CheckPass = $Sql->query("SELECT Password FROM `users` WHERE `Username` = '".$sUser."'");
$CheckActive = $Sql->query("SELECT Activated FROM `users` WHERE `Username` = '".$sUser."'");
if ($CheckUser->num_rows == 0) { header("Location: /?p=Login&wrongusr=true"); die(); }
$xCheckUser = $CheckUser->fetch_array(MYSQLI_ASSOC);
$xCheckPass = $CheckPass->fetch_array(MYSQLI_ASSOC);
$xCheckAct = $CheckActive->fetch_array(MYSQLI_ASSOC);
if ($xCheckAct['Activated'] == "false") { header("Location: /?p=Login&activate=true"); die(); }
if(strtolower($Username) == strtolower($xCheckUser['Username'])) { // Check if username match
if($hash == $xCheckPass['Password']) { // Check if password is correct
if(isset($Remember)){
setcookie ($Cookie."User", htmlspecialchars($Username));
setcookie ($Cookie."Pass", $hash);
}
else
{
setcookie ($Cookie."User", htmlspecialchars($Username), time() + 3600);
setcookie ($Cookie."Pass", $hash, time() + 3600);
}
header("Location: /?login=true"); // Send them to home page
}
else
{
header("Location: /?p=Login&wrongpwd=true"); // Send them to home page
}
header("Location: /?p=Login&unxer=true"); // Username error, Idk why
}
?>