SESSION_start不让我看到一个页面

时间:2016-07-17 13:17:05

标签: php mysql session login

所以我尝试做一个php logIN系统,但是我遇到了$ _SESSION的问题,当我把条件打开用户和密码的account.php页面时,我不知道为什么不让我登录如果用户和pass在数据库中并且是corect

login.php页面         

<?php   if(isset($_POST['login'])){

    $user = $_POST['username'];
    $PW = $_POST['password'];   

    $result = $con->query("SELECT * FROM user WHERE Username='$user' AND Password='$PW'");
    $row = $result->fetch_array(MYSQLI_BOTH);

    session_start();    
    $_SESSION["userID"] = $row['userdID'];
    header('Location: account.php');
    }

?>

account.php页面

<?php require 'conx.php'; ?>

<?php session_start(); 
if(isset($_SESSION["userID"])){
    } else{
        header('Location: login.php');
        }
?>

<p>MY ACCOUNT<?php echo $_SESSION["userID"]; ?> </p>

和DB结构

`userID`, `Name`, `Email`, `Username`, `Password`, `Timestamp`, `Userlevel`, `ProfileImage`, `Bio`

4 个答案:

答案 0 :(得分:2)

问题是你在会话之前有一个空行。这会强制输出启动,从而防止正确处理任何与会话相关的内容。如果删除account.php文件中的第一个结束标记和第二个开始标记,则应该是黄金标记。

答案 1 :(得分:2)

session_start应位于顶部,没有任何空格和echo语句

 <?php 
session_start(); 
  if(isset($_POST['login'])){

        $user = $_POST['username'];
        $PW = $_POST['password'];   

        $result = $con->query("SELECT * FROM user WHERE Username='$user' AND Password='$PW'");
        $row = $result->fetch_array(MYSQLI_BOTH);    
           if($row){
        $_SESSION["userID"] = $row['userdID'];
        header('Location: account.php');
        }
    }
    ?>

答案 2 :(得分:1)

我马上看到了几个问题:

  1. login.php 中,您从未费心检查是否找到了具有正确用户名和密码的记录。在查询之后,您只需调用fetch_array而不检查是否返回了行。

  2. account.php 中,将输出发送到浏览器后,您session_start 。在require 'conx.php'之后不要退出PHP模式。删除关闭和打开标记?> <?php否则,标记之间的空格将发送到浏览器,会话中断。

  3. 由于您没有创建预准备语句,因此您完全暴露于SQL注入攻击。你的密码显然没有哈希。请参阅password_hash()password_verify()

答案 3 :(得分:1)

在login.php中你必须改变这样:

<?php  session_start();  
if(isset($_POST['login'])){
$user = $_POST['username'];
$PW = $_POST['password'];   

$result = $con->query("SELECT * FROM user WHERE Username='$user' AND Password='$PW'");
$row = $result->fetch_array(MYSQLI_BOTH);

  echo 'ROW =>'.$row['userdID'];
$_SESSION["userID"] = $row['userdID'];
//header('Location: account.php'); // for see if you have something in row
}
?>

在您的account.php页面中,在require ..和另一个之间有一个空行

你必须把session session_start();在任何html objet之前(echo或line,
..)

你的account.php必须是这样的:

<?php session_start(); 
require 'conx.php';
if(isset($_SESSION["userID"])){
} else{
    header('Location: login.php');
    }
?>

<p>MY ACCOUNT<?php echo $_SESSION["userID"]; ?> </p>