登录后返回表单并且不显示用户名[关闭]

Posted

技术标签:

【中文标题】登录后返回表单并且不显示用户名[关闭]【英文标题】:Returning to form and not showing users name after logging in [closed] 【发布时间】:2016-01-20 23:32:33 【问题描述】:

我正在创建一个用户可以登录的网站,然后他们的姓名将被放置在他们之前登录的框中,在我的情况下,它会显示“您已登录”。这是之前和之后的截图:

当前会话在您尝试登录后返回登录表单,它不显示“您已登录”语句。下面是 index.php 页面的代码:

<?php
session_start();
?>

<!DOCTYPE html>
<html>
<head>
    <title>Sean Coyne's Food Shop</title>
    <link href="style.css" type="text/css" rel="stylesheet"/>
    <link rel="icon" type="image/x-icon" href="images/favicon.ico" />
    <meta name="description" content="Welcome to Sean Coyne's Food Shop" />
</head>

<body>
    <div id="page">
        <div id="logo">
            <img src="images/logo.jpg"  
            title="Sean Coyne's Food Shop"  />

        <div id="login">
            <?php if (isset($_SESSION['username']))  ?>
            <h2>You are logged in</h2>
            <?php  else ?>

            <form action="" method="post">
            <label>UserName :</label>
            <input id="name" name="username" placeholder="username" type="text">
            <label>Password :</label>
            <input id="password" name="password" placeholder="**********" type="password">
            <input name="submit" type="submit" value=" Login ">
            </form>

            <?php ?>
        </div>

        </div>

        <div id="nav">
            <div id="menu">
                <ul>
                <li><a href="index.php">Home</a></li>
                <li><a href="food.php">Food</a></li>
                <li><a href="drink.php.html">Drink</a></li>
                <li><a href="about.php">About Us</a></li>
                <li><a href="findus.php">Where to find us</a></li>
                <li><a href="contact.php">Contact Us</a></li>
                </ul>
            </div>
        </div>

        <div id="main">
            <h1>Welcome to Sean Coyne's Food Shop</h1>
        </div>
    </div>  
</body>
</html>

【问题讨论】:

创建会话的代码在哪里? 我假设 session_start();创建会话?我对会话很陌生 您需要执行 $_SESSION['username'] = 'someusername' 才能触发 If(isset($_SESSION['username']))。 我们需要查看认证成功码。身份验证成功后,您需要声明 $_SESSION 变量以供以后参考。 不知道,您没有提供实际代码。我的猜测是你没有正确设置 $_SESSION['username']。 【参考方案1】:

您需要添加登录逻辑。看起来是这样的:

<?php
/* Login Logic */
$users = [
    [
        'username' => 'Max',
        'password' => 'a94a8fe5ccb19ba61c4c0873d391e987982fbbd3'
    ],
    [
        'username' => 'Jenny',
        'password' => 'a94a8fe5ccb19ba61c4c0873d391e987982fbbd3'
    ],
];
 //if we have data from the form submission
if($_POST) 
    $username = $_POST['username'];
    $password = $_POST['password'];

    foreach($users as $user) 
        //matching usernames
        if($user['username'] === $username) 

            //hash form inputed password to try and match with users passwords
            $hashed_form_password = sha1($password);

            //if passwords match
            if($hashed_form_password === $user['password']) 
                $_SESSION['username'] = $user['username'];
            
        
    

/* End Login Logic */
?>

您可以将此代码放在页面上的任何位置,如果您使用用户名“Max”或“Jenny”登录,密码为“test”,您将收到“您已登录”消息,因为您设置了“用户名” ' $_SESSION 中的变量。

您似乎是使用 php 构建网站的新手,所以即使这对其他人没有帮助,您也可能会从中有所收获! :)

【讨论】:

谢谢你,是的,我对使用 php 构建非常陌生,这对你很有帮助。【参考方案2】:

所以我假设你没有使用类似的东西创建会话。

if (password_verify($_POST['password'], $password)) 
            // Verification success! User has loggedin!
            $_SESSION['username'] = $_POST['username'];
            header('Location: nameOfPageYouWantSession.php');
            exit;
         else 
            echo 'Incorrect username and/or password!';
        

在一个新文件上使用这个脚本,比如 logIn.php

所以你的登录表单应该是这样的

<form  action="logIn.php" method='POST'>

logIn.php 页面应该用于从登录表单进行所有检查。所以你应该对照你的数据库检查用户名和密码,然后如果一切正确,就将它们重定向到你想要的页面。

用户将能够登录,然后他们的名字将被放置在框中

您可以从会话中创建用户名变量:

 <?php
 session_start();
 $username =$_SESSION['username'];
 ?>

然后进一步打印该变量

<?php echo $username; ?>

【讨论】:

不,我没有,这在

你已登录

好的,然后我应该在表单操作中声明 logIn.php 吗? header('nameOfPageYouWantSession.php); 会因为 2 个原因而失败。 php.net/manual/en/function.header.php 欢迎回来@Fred-ii-,请赐教:) @Fred-ii- 太棒了,我喜欢 ***。

以上是关于登录后返回表单并且不显示用户名[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

登录表单:无论它显示“用户名/密码组合不正确”的消息[关闭]

用户登录时不显示表单,但用户注销时显示

html提交表单后返回原页面并显示表单数据

Laravel 8:为啥登录刀片不显示 Javascript 警报 [关闭]

使用 Laravel Guards 登录后,如何限制用户不访问登录页面?

使用spring webflow,在前台页面中如何显示后端返回的错误信息