if(!isset($ _ SESSION ['username']))导致用户从verify_login_form.php重定向回index.php

问题描述 投票:2回答:1

我的网站上有一个登录系统,它将用户从index.php带到verify_login_form.php然后,如果电子邮件/用户名组合与帐户匹配,则将它们带到home.php。我遇到的问题是我有

if(!isset($_SESSION['username'])) {


header('Location: index.php');

}

在home.php上,以避免人们在没有登录/注册的情况下输入websitename.com/home.php。问题是,用户使用他们的电子邮件和密码登录,然后被带到home.php,因此他们不必输入他们的用户名。如何获得具有相同电子邮件和密码的帐户的用户名?

这是index.php

<!DOCTYPE html>
<?php

session_start();

if(isset($_SESSION['username'])) {

header("Location: home.php");

$_SESSION["success"] = "You are now logged in";

}


?>
<html>

<head>


</head>


<body>


<form action="verify_registration_form.php" method="post">
<br>
<input type="username" id="user_name" name="user_name" placeholder="Username" required>
<br><br><br><br><input type="password" id="user_pass_word" name="user_pass_word" placeholder="Password" required>
 <br><br><br><br><input type="email" id="user_email" name="user_email" placeholder="Email" required>
<br><br><br><br><input type="submit" class="submit_registration_form_button" id="submit_registration_form_button" name="submit_registration_form_button" value="Sign Up">

</form>

<form action="verify_login_form.php" method="post">

<input type="username" id="user_email_login" name="user_email_login" placeholder="Email" required>
<input type="password" id="user_pass_word_login" name="user_pass_word_login" placeholder="Password" required>
<input type="submit" class="submit_user_login_form_button" id="submit_user_login_form_button" name="submit_registration_form_button" value="Log In">

 </form>


 </body>


 </html>

这是verify_login_form.php

<!DOCTYPE html>
<?php

session_start();


if($_SERVER['REQUEST_METHOD'] != 'POST') {

header("Location: index.php");

}else{

$connection = mysqli_connect("localhost", "root", "", "websiteusers");

if(!$connection) {

echo "Could not connect to MYSQL database";

}else{
echo "Sucessfully connected to MYSQL database";
$connection = mysqli_connect("localhost", "root", "", "websiteusers");
$useremail = mysqli_real_escape_string($connection, 
$_POST["user_email_login"]);
$userpassword = mysqli_real_escape_string($connection, 
$_POST["user_pass_word_login"]);
$query = "SELECT * FROM websiteusers WHERE UserEmail='$useremail'";
$results = mysqli_query($connection, $query);
if(mysqli_num_rows($results) == 1) {


$_SESSION['username'] = $username;
$_SESSION['success'] = "You are now logged in";
header("Location: home.php");
}else{

echo "Email/Username combination is incorrect";

}



}



}






?>
<html>

<head>


</head>

<body>



</body>



 </html>

这是home.php

<!DOCTYPE html>
<?php

session_start();

if(!isset($_SESSION['username'])) {


header('Location: index.php');

}



?>
<html>

<head>


</head>


<body>

<?php

echo $_SESSION["success"];


 ?>

 <?php if (isset($_SESSION['username'])) : ?>

 <p>Welcome <?php echo $_SESSION['username']; ?>


 <br><br>

 <form action="logout.php" method="post">
 <input type="submit" id="logoutbutton" name="logoutbutton" class="logoutbutton" value="Logout">
  </form>

  <?php  endif ?>

  </body>


   </html>
php html mysql
1个回答
1
投票

您所要做的就是为登录创建会话。所以这就是诀窍。每次从索引移动到home时,都应检查登录会话是否存在。如果没有,请要求用户登录。

检查用户是否已登录

<?PHP
    session_start();

    if (!(isset($_SESSION['login']) && $_SESSION['login'] != '')) {

        header ("Location: login.php");
    }
?>

我们再次开始PHP会话。接下来的IF声明非常复杂。但我们正在测试两件事:是否设置了一个名为login的用户会话?这个会话是一个空白字符串吗?

!(isset($_SESSION['login']) && $_SESSION['login'] != '')

第一部分是这样的:

!(isset($_SESSION['login'])

要检查会话是否已设置,您可以使用内置函数isset。我们之前使用的是NOT运算符。 (NOT运算符是一个感叹号。)所以我们说,“如果没有设置会话”。会话可能已设置,但可能包含“1”。我们还需要检查名为login的会话是否为NOT空字符串。如果这两件事都失败了,那么我们可以重定向到login.php页面,因为这意味着用户没有登录。

对于您网站中的每个页面,如果您在页面顶部有上述脚本,则会在用户未登录时重定向用户。这样,您就可以保护您的网页免受非会员的侵害。如果他们已登录,他们将能够查看该页面。

注销如果你看一下logout.php的代码,你会看到以下内容:

<?PHP
    session_start();
    session_destroy();
?>

这就是您注销用户所需的全部内容:启动会话,然后发出session_destroy命令。您只需从您网站上的任何位置链接到此页面即可。链接将像您的HTML一样:

<A HREF = logout.php>Log Out</A>

当用户单击此链接时,他们将被带到包含销毁会话的代码的页面。

© www.soinside.com 2019 - 2024. All rights reserved.