从登录脚本困境重定向循环

时间:2015-02-12 16:08:52

标签: php loops redirect login

我遇到过一个我从未见过的登录脚本问题,需要一些帮助来解决它。

我有以下php文件:

  1. 的index.php
  2. signIn.php
  3. index.php 中,有一个登录表单,定向到 signIn.php 以验证用户信息。只要用户的凭据正确无误,它就会将用户重定向回 index.php 并回显用户用户名

    问题1

    如果用户未登录,那么应该回显用户名的 index.php 部分会显示以下错误:

      

    未定义的索引:第26行的index.php中的用户名

    为了解决这个问题,我将以下PHP添加到 index.php - 假设它有助于找到未定义的索引:

    include 'signIn.php';

    问题2

    包含会导致重定向循环,并且不允许用户登录。如何在用户登录时重定向回 index.php ,同时还使用include signIn.php


    index.php(剥离)

    <?php
        session_start();
        include 'signIn.php';
    ?>
    <head>
        Blah blah
    </head>
    <body>
        <div>
            <?php
                if($_SESSION["username"]) {
                    echo $_SESSION["username"];
                } else {
                    echo "Guest";
                }
            ?>
        </div>
        <form action="signIn.php" method="POST">
            <h1>Sign in</h1>
            <?php if($message!="") { echo $message; } ?>
            <input type="email" name="username">
            <input type="password" name="password">
            <input type="submit" value="Sign in">
        </form>
    </body>
    

    signIn.php

    <?php
        session_start();
        $message="";
        if(count($_POST)>0) {
    
            $conn = mysql_connect("localhost","blah","blah");
            mysql_select_db("blah",$conn);
    
            $result = mysql_query("SELECT * FROM users WHERE UserName='" . $_POST["username"] . "' and Password = '". $_POST["password"]."'");
    
            $row  = mysql_fetch_array($result);
    
            if(is_array($row)) {
                $_SESSION["username"] = $row["UserName"];
            } else {
                $message = "Invalid Username or Password!";
            }
        }
    
        if(isset($_SESSION["username"])) {
            header("Location:index.php");
        }
    ?>
    

3 个答案:

答案 0 :(得分:0)

您需要检查$_SESSION['username']是否已设置:

if (isset($_SESSION['username']) {
    // Hi user!
}

对于问题2,如果与上述条件相反,您只想包含signIn

if (! isset($_SESSION['username']) {
    // Redirect the user
}

答案 1 :(得分:0)

您需要使用$ _POST super global来获取用于使用post方法的用户名的值。

喜欢这样,

  $_SESSION["username"] = $_POST["username"];

答案 2 :(得分:0)

的index.php

if (!isset($_SESSION['username'])) {
   Header("Location: signin.php");
   exit(0);
}

signin.php

<?php
    session_start();

    if(count($_POST)>0) {
           // do auth here
           ## Beware of your mysql code which is sensible to sql injection.
           //
           if ($AUTHOK) {
               header("Location:index.php");
               exit(0);
           }
    }

?>
... html code ...