php - 页面仅在登录后才可访问

标签 php mysql authentication

你好,Stackoverflowers

我是 PHP 新手,我正在尝试为我的测试页创建一个成员(member)区域。我已经成功创建了注册和登录页面,但是现在当我更改代码时,如果我正确登录,它会将我重定向到一个页面,如果我使用错误的信息登录,它会将我发送到另一个页面。但是,如果您在地址栏中键入位置,则可以访问成员(member)区域。现在,这就是我需要帮助的地方,当有人尝试在未登录的情况下访问该位置时,它应该显示“访问被拒绝”,但是当您登录时,它应该将您重定向到成员(member)区域并显示所有内容。

这是我的代码:

登录.php

<?php
session_start();
  $host = 'localhost';
  $user = 'root';
  $pass = '';
  $db = 'Data';

mysql_connect($host, $user, $pass);
mysql_select_db($db);

 if(isset($_POST['username'])) {
    $username = $_POST['username'];
    $password = $_POST['password'];
    $sql = "SELECT * FROM Project WHERE username='$username' AND password='$password' LIMIT 1";
    $res = mysql_query($sql);
    if (mysql_num_rows($res) == 1){
      header("Location: loggedin.php");
      exit();
    } else {
      echo 'Anv&auml;ndarnamn eller l&ouml;senord st&auml;mmer ej med informationen i databasen, var sn&auml;ll f&ouml;rs&ouml;k igen <br>';
      echo '<a href="login.php">G&aring; tillbaka</a> Eller <a href="signup.php">Registrera dig</a>';

      exit();
    }
  }
?>


<html>

<head>

  <meta charset="UTF-8">

  <title>Logga in</title>

    <script src="js/prefixfree.min.js"></script>

</head>

<body>

  <div class="body"></div>
        <div class="grad"></div>
    <div class="wrapper">
        <div class="header">
            <div>bababa<span>bababa</span></div>
        </div>
        <br>
        <div class="login">
      <form method="post" action="login.php">
                <input type="text" placeholder="Anv&auml;ndarnamn" name="username" required><br>
                <input type="password" placeholder="L&ouml;senord" name="password" required><br>
                <input type="submit" value="Logga in">
      </form>
        </div>
  </div>

  <script src='http://codepen.io/assets/libs/fullpage/jquery.js'></script>

</body>

</html>

注册.php

<!DOCTYPE HTML>
<html lang="sv">
<head>
<link href='http://fonts.googleapis.com/css?family=Oswald' rel='stylesheet' type='text/css'>
<link href='http://fonts.googleapis.com/css?family=Open+Sans' rel='stylesheet' type='text/css'>
<script src="http://code.jquery.com/jquery-1.11.2.min.js"></script>
<script type="text/javascript" >
$(".name").focus(function(){
  $(".name-help").slideDown(500);
}).blur(function(){
  $(".name-help").slideUp(500);
});

$(".email").focus(function(){
  $(".email-help").slideDown(500);
}).blur(function(){
  $(".email-help").slideUp(500);
});



</script>

</head>
<div class="wrapper">
  <h1>Registrera er h&auml;r</h1>
  <p>Detta &auml;r ett test-formul&auml;r f&ouml;r Webbutvecklingsprojektet. Skriv ditt namn h&auml;r
  under och om allt funkar r&auml;tt skall systemet lagra ditt namn i en MySQL databas.</p>

  <form class="form" name="form" method="post" action="add.php">

     <input type="text" id="username" name="username" placeholder="Anv&auml;ndarnamn" required>

     <input type="password" id="password" name="password" placeholder="L&ouml;senord" required>

 <input type="email" id="email" name="email" placeholder="E-mail" required>


    <input type="submit" class="submit" value="Registrera dig">

  </form>

  <h3>
    Allm&auml;nt & regler:
  </h3>
  <ul>
    <li>Maximalt 2GB Lagring</li>
    <li>Du m&aring;ste skriva f&ouml;r- och efternamn</li>
    <li>Databasen lagrar bara upp till 60 anv&auml;ndare</li>
  </ul>
</div>
<p class="optimize">
</p>
</html>

最后:login.php

 <?php
session_start();
  $host = 'localhost';
  $user = 'root';
  $pass = '';
  $db = 'Data';

mysql_connect($host, $user, $pass);
mysql_select_db($db);

   if(!isset($_SESSION['username'])) {
   die("Please login");
} else {
echo 'Du &auml;r inloggad';
}
?>

FTR:我尝试了 if isset,但即使我正确登录,也会显示相同的消息:请登录,我应该如何解决此问题?

我是这方面的新手,所以请帮助我一点

谢谢!

最佳答案

您可以使用 CookiesSESSION 来执行此操作。

当用户通过身份验证后,在重定向到主页之前,您应该设置一个 session 变量,如下所示:$_SESSION['id']=$user_id;。如果你想设置COOKIES,以便用户即使在关闭浏览器后也可以直接访问他的帐户,你可以这样设置 setcookie($cookie_name, $cookie_value, time() + (86400 * 30),“/”);//1 天

因此,现在在每个页面的开头,您需要启动 session session_start() 以获取您在登录期间设置的 session 值。 如果 session 中存在任何用户信息的user_id,它将自动使用该信息访问页面。

现在考虑到您希望用户在尝试访问主页时自​​动重定向到登录页面/访问被拒绝。您可以通过检查 session user_info 或 cookie 是否存在来做到这一点...如果不存在' t 根据您的需要将他重定向到登录页面或任何错误页面...

在您的代码中,在 header("Location:login.php"); 之前创建一个 session $_SESSION['username'] = $username;。请记住每个页面上的 session_start() ,其中将使用 $_SESSION 值..

关于php - 页面仅在登录后才可访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28640020/

相关文章:

php - 当有人登录时显示注销按钮?

php - 从一个mysql表复制一行到另一个表,并修改字段值

php - 像调用函数一样调用对象?

php - 如何在 PHP 中使用正则表达式修复 PATHS 的路径而不破坏 URL?

php - 使用 PHP 打印到网络打印机

php - 如何停止 Doctrine2 迁移 :Diff from always adding foreign key relationships that already exist in Database?

c# - ASP.NET Core WebAPI Cookie + JWT 认证

mysql运行与group by的区别

java - 从两个类内部加入 hibernate

Silverlight - 根据用户角色控制可见性