登录后返回表单并且不显示用户名[关闭]
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- 太棒了,我喜欢 ***。以上是关于登录后返回表单并且不显示用户名[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
登录表单:无论它显示“用户名/密码组合不正确”的消息[关闭]
Laravel 8:为啥登录刀片不显示 Javascript 警报 [关闭]