我的登录代码有点问题,当我尝试登录时,它第一次无法正常工作。我不知道我做错了什么,但第一次它总会给我错误,这里是代码(评论是荷兰语):
<?php
if(isset($_POST['login'])){
$username = $_POST['username'];
$password = $_POST['password'];
//Maakt de variables korter, en beschermt ze tegen sql injectie d.m.v. real_escape
$gb = mysqli_real_escape_string($con, $_POST['username']);
$password = mysqli_real_escape_string($con, $_POST['password']);
//Deze maakt de wachtwoord en salt 1 Dat zorgt ervoor als je database
//ooit wordt gehackt, ze niet je klanten hun wachtwoord hebben.
$ww1 = $password.$salt;
//Deze encrypt het nieuwe wachtwoord, dus bijv stel het wachtwoord is lol123 en je salt is abc123
//dan is het wachtwoord lol123abc123
$ww = sha1($ww1);
//Vergeet niet de tablenaam medewerkers aan te passen naar jou shit.
//Dit is de query
$select_user = "SELECT * FROM users WHERE username='$gb' AND password='$ww'";
//Deze zin runned de query daadwerkelijk
$run_user = mysqli_query($con, $select_user);
//Deze kijkt hoeveel ROWS er terugzijn gekomen, als het meer dan 1 is klopt het dus.
$check_user = mysqli_num_rows($run_user);
if($check_user>0){
session_start();
$_SESSION['username'] = "$gb";
echo "<script>{location.href = 'home.php'; };</script>";
}else {
echo "<p> Gegevens kloppen <b>niet!</b></p>";
}
}
?>
这是登录页面的代码^。
这是主页的代码,它将在登录后进入:
<?php
session_start();
$username = $_SESSION['username'];
if(strlen($username) < 1){
die('Error');
}
?>
我真的不知道什么是错的
答案 0 :(得分:1)
正如我在评论中所说,你需要先启动会议,然后在发生任何事情或意图发生之前将其置于最前面。
所以在你的第一个文件中:
<?php
session_start();
// rest of your code.
并检查会话是否已设置。
您还应该使用准备好的声明和password_hash()
。如果你现在或正在使用此代码,那么你现在的代码并非真的可以安全使用。
参考文献:
&#34;但这会影响2次登录吗?&#34;
是的,这很重要。这里发生的事情是,当您加载登录页面时,由于其位置/位置,会话未启动。
只要您重新加载它,因为用户已登录并且会话数组已设置/非空,会话就已启动,因为它已包含在该文件中,只是向下。
您还应该创建一个注销文件并销毁会话。
否则,可能会产生不利影响。