【问题标题】:PHP Session to authenticate user access to pagesPHP Session 验证用户对页面的访问权限
【发布时间】:2016-06-16 08:18:52
【问题描述】:

我正在尝试在我的网站上实施用户登录系统。我已经做了注册登录功能,现在我正在尝试使用会话来制作它,所以只有登录的用户才能访问某些页面,我的登录页面的代码如下:

<? 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
    }

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

【问题讨论】:

  • 您是否收到任何错误消息?您是否检查过您确实已登录?
  • 您是否在另一页的开头添加了&lt;? session_start(); ?&gt;
  • 我建议你把$count &gt; 0 设置为两次用户名会话?
  • 抱歉,您的代码几乎包含所有初学者错误:使用了已经从 PHP/7 语言中消失的遗留 mysql 扩展、对 SQL 注入开放、纯文本密码......跨度>
  • Jeez holly 抽 sql 注入!

标签: php html session


【解决方案1】:

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

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

  2. 不然就不行了

这还允许获取您可能想要使用/显示的其他用户详细信息,例如用户个人资料、全名等。事实上,即使用户名也应该显示为存储在数据库中,而不是上次登录时输入的内容。

您的代码可以进行一些改进,但我会给您一条我认为特别有用的建议:放弃您当前的学习材料(在线教程、书籍等),这些材料已经非常过时并且可能在第一,找到更好的东西。至少使用 PDO、准备好的语句和 password_verify() 的东西。人生太短,学不到你不需要的东西。

【讨论】:

    【解决方案2】:

    如果你想在每次刷新页面时检查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');
    }
    

    【讨论】:

      【解决方案3】:

      试试这个

      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  {
      
              }
          }
      

      【讨论】:

        【解决方案4】:

        我认为它不起作用,因为你在脚本结束时破坏了你的会话

        【讨论】:

        • 这应该是评论而不是回答
        猜你喜欢
        • 1970-01-01
        • 2014-06-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多