[英]PHP Header function and $_SESSION variables not working
我在兩個不同的服務器上執行一個項目,我的代碼在一個服務器上完美運行,而拒絕在另一個服務器上運行。
該代碼的目的是讓用戶在login.php頁面上登錄,如果他們的登錄憑據正確,則將其重定向到dashboard.php頁面。 header.php文件僅包含用於不同用戶登錄的導航欄的信息。
請讓我知道錯誤可能在哪里。
我不確定這是否是兩個不同的問題,但是Header重定向都無法正常工作,會話變量也都沒有存儲。 我確保在標題重定向之前沒有回顯任何內容。
Login.php
<?php include('header.php');?>
<?php
session_start();
$dbusername = $_SESSION['username'];
$dbfName = $_SESSION['fName'];
$dblName = $_SESSION['lName'];
$sessiontype = $_SESSION['type'];
if($dbusername && $dbfName && $dblName && $sessiontype){
header('Location: ./dashboard.php');
}
if(isset($_POST['login_button'])){
session_start();
$getuser = $_POST['username'];
$getpass = $_POST['password'];
$getpassmd5 = md5(md5($getpass));
if($getuser && $getpass){
require('connect.php');
$query1 = "SELECT * FROM students WHERE StudentNum='$getuser'";
$exequery1 = mysql_query($query1);
if(mysql_num_rows($exequery1) > 0){
while ($row = mysql_fetch_assoc($exequery1)){
$dbusername = $row['StudentNum'];
$dbpass = $row['password'];
$dbDOB = $row['DOB'];
$dbfName = $row['FirstName'];
$dblName = $row['LastName'];
}
if($dbpass){
if($getuser === $dbusername && $dbpass === $getpassmd5){
$_SESSION['username'] = $dbusername;
$_SESSION['fName'] = $dbfName;
$_SESSION['lName'] = $dblName;
$_SESSION['type'] = "student";
header('Location: ./dashboard.php');
}
else{
echo("<h4><center>You have entered incorrect login credentials</h4></center>");
}
}
else{
if($getuser === $dbusername && $getpass === $dbDOB){
$_SESSION['username'] = $dbusername;
$_SESSION['fName'] = $dbfName;
$_SESSION['lName'] = $dblName;
$_SESSION['type'] = "student";
header('Location: ./dashboard.php');
}
else{
echo("<h4><center>You have entered incorrect login credentials</h4></center>");
}
}
}
else{
$query2 = "SELECT * FROM teachers WHERE username='$getuser'";
$exequery2 = mysql_query($query2);
if(mysql_num_rows($exequery2) > 0){
while ($row = mysql_fetch_assoc($exequery2)){
$dbusername = $row['username'];
$dbpass = $row['password'];
$dbfName = $row['FirstName'];
$dblName = $row['LastName'];
$dbtype = $row['type'];
}
if($getuser === $dbusername && $dbpass === $getpassmd5){
$_SESSION['username'] = $dbusername;
$_SESSION['fName'] = $dbfName;
$_SESSION['lName'] = $dblName;
$_SESSION['type'] = $dbtype;
header('Location: ./dashboard.php');
}
else{
echo("<h4><center>You have entered incorrect login credentials</h4></center>");
}
}
else{
echo("<h4><center>You have entered login credentials that do not exist</center></h4>");
}
}
}
else{
echo("<h4><center>Please enter both a username and password</center></h4>");
}
}
?>
首先,您不應使用不同的<?php
和?>
標記。
作為其空間。
<?php include('header.php');?>
<?php
session_start();
應該:
<?php
session_start();
include('header.php');
它在文件中添加了一個空格,因此不會發生重定向。
聽起來像Apache服務器或PHP配置問題。 在兩台服務器上,使用以下命令運行腳本:
phpinfo();
比較它們之間的差異。 另外,請檢查.ini中的PHP版本,已加載的擴展名和配置。 可能是Apache httpd.conf,但我猜測它是php.ini問題還是PHP版本問題。
建議:在每個文件的第1行上創建一個自動裝載程序,使其成為PHP包含的文件。 在其中自動加載會話,數據庫和常量。 這將確保在輸出HTML之前加載會話,這似乎是其他人看到問題的地方。
第1行:require_once('config.php');
做session_start();
進入頁面的第一行
<?php
session_start();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.