所以我尝试做一个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`
答案 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)
我马上看到了几个问题:
在 login.php 中,您从未费心检查是否找到了具有正确用户名和密码的记录。在查询之后,您只需调用fetch_array
而不检查是否返回了行。
在 account.php 中,将输出发送到浏览器后,您session_start
。在require 'conx.php'
之后不要退出PHP模式。删除关闭和打开标记?> <?php
否则,标记之间的空格将发送到浏览器,会话中断。
由于您没有创建预准备语句,因此您完全暴露于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,
..)
<?php session_start();
require 'conx.php';
if(isset($_SESSION["userID"])){
} else{
header('Location: login.php');
}
?>
<p>MY ACCOUNT<?php echo $_SESSION["userID"]; ?> </p>