Php 如何禁止用户在未登录时访问我的主页

Php 如何禁止用户在未登录时访问我的主页,php,url,Php,Url,我已经搜索了很多方法来阻止直接url访问,但是没有一种方法适合我的代码。我试着把 if ( !isset($_SESSION['logged-in']) || $_SESSION['logged-in'] !== true) { // not logged in, move to login page header('Location: login.php'); exit; } 该代码用于在用户未登录时尝试访问主页时验证和更改页面。未登录时无法访问主页,但问题是即使用户名和密码正确,它

我已经搜索了很多方法来阻止直接url访问,但是没有一种方法适合我的代码。我试着把

if ( !isset($_SESSION['logged-in']) || $_SESSION['logged-in'] !== true) {

// not logged in, move to login page

header('Location: login.php');

exit;

}
该代码用于在用户未登录时尝试访问主页时验证和更改页面。未登录时无法访问主页,但问题是即使用户名和密码正确,它仍会转到登录页面。代码有什么问题

主页:

    <?php
  require 'user.php';
session_start();
if ( !isset($_SESSION['logged-in']) || empty($_SESSION['logged-in'])){

header('Location:index.php');

exit;

}

?>


<html>
  <head>
    <title>Home Page</title>
  </head>
  <body>
    <p>
      You have successfully logged in 

      <?php
session_start();

        $user = $_SESSION['current_user'];

        echo $user->firstname.' '.$user->lastname.'.';
?>



    </p>

    <p>This is your home page.</p>

    <p>Click <a href='update_user.php?username=<?php echo $user->username ?>'>[here]</a> to update user profile.</p>    
    <p>Click <a href='list_user.php'>[here]</a> to see the list of users.</p>    
  </body>
</html>

主页

您已成功登录

这是你的主页

单击以更新用户配置文件。

单击以查看用户列表。

登录页面

<html>
  <head>
    <title>Login Page</title>
  </head>
  <body>
    <p>Enter Username and Password to Login:</p>
    <form action='login_process.php' method='post'>
      <table border='1'>
        <tr>
          <td>Username:</td>
          <td><input type='text' name='username'></td>
        </tr>
        <tr>
          <td>Password:</td>
          <td><input type='password' name='password'></td>
        </tr>
        <tr>
          <td>&nbsp</td>
          <td><input type='submit' value='Login'></td>
        </tr>
      </table> 
    </form>
  </body>
</html>

登录页面
输入要登录的用户名和密码:

用户名: 密码:  
登录过程

 <?php
  require 'user.php';
?>
<?php
  $user = new User();
  $user->username = $_REQUEST['username'];
  $user->password = $_REQUEST['password'];

  $found = $user->checkLogin();


  if ($found){//redirect to home page
    session_start();
    $_SESSION['current_user']=$user;
    header("Location: home.php");
    exit;
  }
   else{//invalid username and password
    echo "Invalid username/password.  Click <a href='index.php'>[here]</a> to login again.";
  }
?>

1)您似乎没有为$\u SESSION['logged\u in']分配任何值,因此您的第一个断言可能会返回true。为什么不检查是否设置了“当前用户”

2) 您正在此行使用精确相等运算符(读取:!==): $\u会话[“已登录”]!==真的 如果不是(类型为布尔且为true)或($\u会话不存在),则断言将始终为true,并导致登录页面

3) 在检查$会话超全局之前,您是否已完成会话启动?否则,$\u会话变量将不会填充任何内容。

index.php

<?php
session_start();
require('user.php'); ?><html>
<head>
<title>Home Page</title>
</head>
<body>
    <p><?php
    // You are either logged in or not. If not, let user know to login.
    if(!isset($_SESSION['username'])) { ?>
             You must be logged in to view this content
            <a href="login.php">Click to login</a>
            <?php }
    else {
            $user   =   $_SESSION['current_user'];
            echo $user->firstname.' '.$user->lastname.'.'; ?></p>
    <p>This is your home page.</p>
    <p>Click <a href='update_user.php?username=<?php echo $user->username ?>'>[here]</a> to update user profile.</p>    
    <p>Click <a href='list_user.php'>[here]</a> to see the list of users.</p> 
    <?php } ?>   
</body>
</html>

主页

您必须登录才能查看此内容

这是你的主页

单击以更新用户配置文件。

单击以查看用户列表。

进程登录

<?php
    session_start();
    require('user.php');
    $user           =   new User();
    $user->username =   $_REQUEST['username'];
    $user->password =   $_REQUEST['password'];
    // Validate user
    $found          =   $user->checkLogin();

    if($found == true) {
            //redirect to home page
            $_SESSION['current_user']   =   $user;
            // Assign username to session for check on homepage and elsewhere
            // If not logged in, this session variable should not be set
            // Should be destroyed if user logs out.
            $_SESSION['username']       =   $_POST['username'];
            header("Location: home.php");
            exit;
        }
    //invalid username and password, redirect with login error
    else 
        header("Location: login.php?error=login"); ?>

login.php

<html>
  <head>
    <title>Login Page</title>
  </head>
  <body>
<!-- If error, let user know their login failed-->
<p><?php echo (isset($_GET['error']) && $_GET['error'] == 'login')? '<span style="color: red;">Invalid Username/Password.</span> Please try again.':"Enter Username and Password to Login:"; ?></p>
    <form action='login_process.php' method='post'>
      <table border='1'>
        <tr>
          <td>Username:</td>
          <td><input type='text' name='username'></td>
        </tr>
        <tr>
          <td>Password:</td>
          <td><input type='password' name='password'></td>
        </tr>
        <tr>
          <td>&nbsp</td>
          <td><input type='submit' value='Login'></td>
        </tr>
      </table> 
    </form>
  </body>
</html>

登录页面

用户名: 密码:  
会话启动()使用会话加载到所有页面中?如果不是,就去做。使用会话时需要它。
var\u dump($\u会话)此代码不足以继续。尝试
如果(!isset($会话['logged-in']){..}
如果(!isset($会话['logged-in'])为空($会话['logged-in']))
-如果您想在注销时销毁会话,如果您还没有这样做,则需要这样做;和/或取消设置。它仍然不起作用。请在打开
之后立即将错误报告添加到文件顶部。否,我希望我的用户在未登录时不允许访问主页。请给出您所说的确切代码好吗?我已经将登录用户更改为当前用户。我有一个会话\u start()。怎么了?(在SESSION_start()之后,在主页上尝试一个var_dump($_SESSION),并验证您的变量是否是您想要的?
<html>
  <head>
    <title>Login Page</title>
  </head>
  <body>
<!-- If error, let user know their login failed-->
<p><?php echo (isset($_GET['error']) && $_GET['error'] == 'login')? '<span style="color: red;">Invalid Username/Password.</span> Please try again.':"Enter Username and Password to Login:"; ?></p>
    <form action='login_process.php' method='post'>
      <table border='1'>
        <tr>
          <td>Username:</td>
          <td><input type='text' name='username'></td>
        </tr>
        <tr>
          <td>Password:</td>
          <td><input type='password' name='password'></td>
        </tr>
        <tr>
          <td>&nbsp</td>
          <td><input type='submit' value='Login'></td>
        </tr>
      </table> 
    </form>
  </body>
</html>