当前位置: 首页 > 知识库问答 >
问题:

如果(!isset($_SESSION['用户名'))导致用户从verify_login_form.php重定向回index.php

裘光启
2023-03-14

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

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


header('Location: index.php');

}

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

这是索引。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>

这里是家。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>

共有1个答案

范翰海
2023-03-14

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

检查用户是否登录

<?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运算符。非运算符是一个感叹号。)所以我们说,“如果会话没有设置”。会话可能被设置,但可能有一个“1”。我们还需要检查调用登录的会话是否是一个非空字符串。如果这两件事都失败了,那么我们可以重定向到login.php页面,因为这意味着用户没有登录。

对于站点中的每个页面,如果页面顶部有上述脚本,则如果用户未登录,它将重定向用户。这样,您就可以保护页面不受非成员的攻击。如果他们登录,他们将能够查看该页面。

如果您查看了注销代码,请注销。php您将看到以下内容:

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

这就是用户注销所需要的:您启动一个会话,然后发出session_destroy命令。所有你需要的是一个链接到这个页面从任何地方在您的网站。链接将是这样的东西作为您的超文本标记语言

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

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

 类似资料:
  • 我对如何在登录时重定向用户感到困惑 脚本: - 我正在计划我的身份验证。ts,第一次登录时,在我的firebase上,我将设置一个类似于1(如果用户完成了测试)和0(如果用户没有完成测试)的检查器 以下是登录代码: 一个uth.ts

  • 不确定我是否做错了什么,但使用此apihttps://www.firebase.com/docs/security/simple-login-email-password.html根据返回消息,我可以成功创建一个用户,但在Forge控制台的任何地方都看不到该用户。您如何知道注册了哪些用户? 我应该使用返回的用户ID并在Firebase中创建自己的用户对象,还是不需要进行此复制。我确实需要添加一些额

  • 我想重定向用户时,页面打开和张贴参数。我试过这个: 是否可以重定向用户并发布一些参数?

  • 我正在尝试实现一个功能,在登录后,用户会根据其角色重定向到URL。我已经设置了角色部分,但是在登录后立即测试用户的属性时遇到了问题。 我按照这里的说明创建了一个用户登录页面。我有一个看起来像这样的: 我的函数验证用户,但我不知道如何在登录后立即访问用户对象。这就是我目前拥有的: 当我第一次尝试使用管理员帐户登录时,我会进入路径,因为此时没有任何经过身份验证的用户对象。 在尝试登录后,但是得到了一个

  • 问题内容: 我想设置我的网站,以便如果用户点击该页面并且他们已经登录,它将把他们重定向到主页。如果未登录,它将正常显示。由于登录代码内置在Django中,我该怎么做? 问题答案: 我假设你当前正在使用内置的登录视图, 或你网址中的类似内容。 你可以编写包含默认视图的登录视图。它将检查用户是否已经登录,如果已经登录则重定向,否则使用默认视图。 就像是: 当然可以相应地更改你的网址:

  • 我有一行代码: 它工作良好,但用户可以简单地按下Esc键来取消操作。我试图使用一个事件侦听器来防止Esc键被按下,但它只在用户在初始页面时起作用。一旦他们被重定向,它就会停止工作,他们可以在浏览器中快速按Esc键或地址栏旁边的大X来取消重定向。 有什么办法可以让我完全避免? 编辑:我之所以要这样做,是因为在登录时,它们会自动发送到索引页。我在我的数据库中有一个标志,它检查用户是否已经付款。然后在索