我有一个登录表单,当用户注册或登录时会显示一条消息。我希望首先打开登录页面,成功登录后可以显示index.php。也有人应该尝试直接访问/index.php它仍然必须将它们指向login.php进行身份验证。我已经尝试了其他人代码的一些例子,但是我无法获得对用户进行身份验证的页面。
我的Login.php代码:
<?php
session_start();
require_once('connect.php');
if(isset($_POST) & !empty($_POST)){
$username = mysqli_real_escape_string($connection, $_POST['username']);
$password = md5($_POST['password']);
$sql = "SELECT * FROM `login` WHERE username='$username' AND password='$password'";
$result = mysqli_query($connection, $sql);
$count = mysqli_num_rows($result);
if($count == 1){
$_SESSION['username'] = $username;
}else{
$fmsg = "Invalid Username/Password";
}
}
if(isset($_SESSION['username'])){
$smsg = "User already logged in";
}
?>
<!DOCTYPE html>
<html>
<head>
<title>User Login in PHP & MySQL</title>
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" >
<!-- Latest compiled and minified JavaScript -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" ></script>
<link rel="stylesheet" type="text/css" href="styles.css">
</head>
<body>
<div class="container">
<?php if(isset($smsg)){ ?><div class="alert alert-success" role="alert"> <?php echo $smsg; ?> </div><?php } ?>
<?php if(isset($fmsg)){ ?><div class="alert alert-danger" role="alert"> <?php echo $fmsg; ?> </div><?php } ?>
<form class="form-signin" method="POST">
<h2 class="form-signin-heading">Please Register</h2>
<div class="input-group">
<input type="text" name="username" class="form-control" placeholder="Username" required>
</div>
<label for="inputPassword" class="sr-only">Password</label>
<input type="password" name="password" id="inputPassword" class="form-control" placeholde r="Password" required>
<button class="btn btn-lg btn-primary btn-block" type="submit">Login</button>
<a class="btn btn-lg btn-primary btn-block" href="register.php">Register</a>
</form>
</div>
</body>
</html>
答案 0 :(得分:1)
您可以使用if语句检查用户是否登录。 如果用户未登录,则可以将其重定向到login.php 如果用户已登录,则可以让他们查看索引页面。 为此,下面给出了代码示例....
<?php
session_start();
if (isset($_SESSION['loggedin']) && $_SESSION['loggedin'] == true) {
$welcomeMessage = "Welcome to the member's area, " . $_SESSION['username'] . "!";
} else {
header('Location: login.php');
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Index page</title>
</head>
<body>
<?
if(!empty($welcomeMessage)) echo $welcomeMessage;
?>
Index page
</body>
</html>
答案 1 :(得分:0)
我希望首先打开登录页面,成功登录后可以显示index.php。
您可以创建一个.htaccess文件,然后添加以下行:
当有人访问您的网站时, DirectoryIndex login.php
将转到login.php
然后登录login.php
首先检查该用户是否已登录
因此 login.php
<?php
session_start();
require_once('connect.php');
if(isset($_SESSION['username'])){
$smsg = "User already logged in";
header("location:index.php"); // send to index if logged in
}else{
// the code you have in your question here
}
?>
也应该有人尝试直接访问/index.php它仍然必须将它们指向login.php进行身份验证。如果会话设置继续,您需要检查会话是否已设置或发送回登录
<强>的index.php 强>
<?php
session_start();
if(isset($_SESSION['username'])):?>
Your html content
<?php
else:
header("location:login.php");//send them to login
endif;
?>
答案 2 :(得分:0)
绝对最简单的方法(根据我)将创建一个名为auth.php
的新文件,其中包含以下内容:
<?php
session_start();
if (empty($_SESSION['username'])) {
// The username session key does not exist or it's empty.
header('location: /login.php');
exit;
}
然后,在您要保护的每个页面的最顶部(包括index.php),只需添加:
<?php
require __DIR__ . '/auth.php';
?>
// Continue with your HTML here
无需在if/else
- 语句中构建网站。
注意:这假设您的所有网页都在根文件夹中。如果要保护的子文件夹中有其他页面,则需要将正确的路径添加到auth.php
,因为__DIR__
会为您提供写入文件的绝对路径。