在索引之前强制登录页面

时间:2017-02-02 11:40:20

标签: php html

我有一个登录表单,当用户注册或登录时会显示一条消息。我希望首先打开登录页面,成功登录后可以显示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>

3 个答案:

答案 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__会为您提供写入文件的绝对路径。