PHP Session用于验证用户对页面的访问权限

时间:2016-06-16 08:18:53

标签: php html session

我正在尝试在我的网站上实现用户登录系统。我已经创建了注册登录功能,现在我正在尝试使用session来使它只有登录用户才能访问某些页面,我的登录页面的代码如下:

<? session_start(); ?>

<div align="left">
    <a href='register.php'>REGISTER&nbsp; <i class="fa fa-  user-plus" aria-hidden="true"></i></a>
    <? 
        include('HtmlNavSetupnohome.php');
        include('sqlDeets.php') 
    ?>

    <link href="css/hawthorne_type1_color1.css" rel="stylesheet">
    <link href="css/font-awesome.min.css" rel="stylesheet">

    <form action="" method="POST">
        <h3>USERNAME:</h3><input id="username" type="text" name="username"/>
        <h3>PASSWORD:</h3><input id="password" type="password" name="password"/><br>
        <input class="login" type="submit" name="submit" value="Login" />
    </form>

    <?
        include('connect.php');
        if (isset($_POST['username']) and isset($_POST['password'])) {
            $username = $_POST['username'];
            $password = $_POST['password'];
            $query = "SELECT * FROM user WHERE username='$username' and     password='$password'";
            $result = mysql_query($query) or die(mysql_error());
            $count = mysql_num_rows($result);

            if (isset($_POST['submit'])) {
                if ($count == 1) {
                    $_SESSION['username'] = $username;
                } else {
            ?>

            <br>INVALID LOGIN DETAILS<br>
            <?
                session_destroy();
                $_SESSION['username'] = null;
                }
            }

            if (isset($_SESSION['username'])) {
            ?>
            <script type="text/javascript">location.href =   'http://www.bradleyboothman.co/homepage.php';</script>
            <?
                $_SESSION['username'] = $username;  
            } else {

            }
        }

我尝试在每个我想要保护的页面上使用以下内容但没有运气:

<?php
    session_start();

    if (!isset($_SESSION['username'])) {
      // use is not logged in
    } else {
      // user is logged in
    }

知道我做错了什么吗?任何帮助赞赏。

4 个答案:

答案 0 :(得分:0)

使用MySQL API计算结果集中的行数似乎是一种流行的方法,但也是这里无穷无尽的问题的来源。我建议你实际上尝试获取一行并且:

  1. 如果找到行,则用户有效

  2. 否则,它不是

  3. 这也允许获取您可能想要使用/显示的其他用户详细信息,例如用户配置文件,全名等。实际上,即使用户名也应显示为存储在DB中,而不是在上次登录时输入。

    您的代码可以使用一些改进,但我会给您一些我认为特别有用的建议:删除您当前的学习材料(在线教程,书籍,等等),这是非常过时的,可能不是很好首先,找到更好的东西。至少使用PDO,预处理语句和password_verify()。生命太短暂,无法学习你不需要的东西。

答案 1 :(得分:0)

如果您想在每次刷新页面时检查SESSION存在,您只需使用if循环来实现它。

<?php
ob_start(); // to make the below header work

if($_SESSION[username]=="")
{
  header('Location: index.php'); // Redirect to homepage or Login page
}
else
{
  //Do nothing
}

?>

其他选项是,

在用户登录时设置名为 $ _ SESSION [id] 的新SESSION变量。

用户退出时删除该SESSION。

使用if条件检查ID的SESSION是否为空。

if($_SESSION[id]=="")
{
  header('Location: index.php');
}

答案 2 :(得分:0)

试试这个

if (isset($_POST['username']) && isset($_POST['password'])) {
    $username = $_POST['username'];
    $password = $_POST['password'];

    /*
    $query = "SELECT * FROM user WHERE username='$username' and  password='$password'";
    $result = mysql_query($query) or die(mysql_error());
    $count = mysql_num_rows($result);
    */

    // Let's assume it is 1 (Erase this comment once you test this)
    $count = 1;

    if (isset($_POST['submit']))    {
        if ($count > 0) {
            $_SESSION['username'] = $username;
            }
          else  {
            echo "<br />INVALID LOGIN DETAILS<br />";
            session_destroy();
            $_SESSION['username'] = null;
            }
        }

    if (isset($_SESSION['username'])) {

    echo "<script type='text/javascript'>location.href = 'http://www.bradleyboothman.co/homepage.php';</script>";

    }
      else  {

        }
    }

答案 3 :(得分:-1)

我认为它很有效,因为你会在剧本结束时摧毁你的会话