Ich bin neu bei PHP und habe mit folgenden Problemen zu kämpfen:
Ich habe eine Seite, auf der ich prüfen möchte, ob jemand ein registrierter Benutzer ist, bevor er den Inhalt der Website sehen kann. Mein Gedanke war also, dass ich in meiner Header-Datei (die auf allen Einzelseiten über require_once("includes/header.php");
referenziert wird) dies überprüfen und auf eine Login-Seite (login.php
) umleiten können, falls sie noch nicht angemeldet sind.
Also hier ist alles, was ich in meinem Header habe:
<!DOCTYPE html>
<html>
<head>
<?php
define("someUnguessableVariable", "anotherUnguessableVariable");
session_start();
if(!(isset($_SESSION['login']) && $_SESSION['login'] != '')){
header ("Location: login.php");
}
include "system/config.php";
$pageURL = basename($_SERVER["REQUEST_URI"]);
$pageName = pathinfo(parse_url($pageURL, PHP_URL_PATH), PATHINFO_FILENAME);
$selectedLang = $_GET["lang"];
if(!isset($selectedLang)){
$selectedLang = "de";
}
$langURL = "?lang=" . $selectedLang;
$conn = new mysqli($dbServer, $dbUser, $dbPass, $dbName);
$conn->set_charset("utf8");
if($conn->connect_error){
die("Connection failed: " . $conn->connect_error);
}
// fetch main translations
$location = "%main%";
$stmt = $conn->prepare("SELECT tID, " . $selectedLang . " FROM TranslationsMain WHERE location LIKE ? ORDER BY tID");
$stmt->bind_param("s", $location);
$stmt->execute();
$result = $stmt->get_result();
while($arrTranslations = $result->fetch_assoc()){
$trans[] = array("ID" => $arrTranslations["tID"], "trans" => $arrTranslations[$selectedLang]);
}
$conn->close();
// get main translations by ID
function fetchTransMain($trans, $itemID){
foreach($trans as $key => $val){
if($val["ID"] == $itemID){
return $val["trans"];
}
}
}
?>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="author" content="Some author" />
<meta name="description" content="Created: 2015-06" />
<base href="http://www.myurl.de" target="_self" />
<title>Some title</title>
<!-- CSS -->
<link rel="stylesheet" type="text/css" href="includes/styles.css" />
<!-- CSS - Font Awesome -->
<link rel="stylesheet" type="text/css" href="http://maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css" />
<!-- include favicon -->
<link rel="shortcut icon" href="images/favicon/favicon.ico" type="image/x-icon" />
<link rel="icon" href="images/favicon/favicon.png" type="image/png" />
<link rel="icon" sizes="32x32" href="images/favicon/favicon-32.png" type="image/png" />
<link rel="icon" sizes="64x64" href="images/favicon/favicon-64.png" type="image/png" />
<link rel="icon" sizes="96x96" href="images/favicon/favicon-96.png" type="image/png" />
<link rel="icon" sizes="196x196" href="images/favicon/favicon-196.png" type="image/png" />
<link rel="Apple-touch-icon" sizes="152x152" href="images/favicon/Apple-touch-icon.png" />
<link rel="Apple-touch-icon" sizes="60x60" href="images/favicon/Apple-touch-icon-60x60.png" />
<link rel="Apple-touch-icon" sizes="76x76" href="images/favicon/Apple-touch-icon-76x76.png" />
<link rel="Apple-touch-icon" sizes="114x114" href="images/favicon/Apple-touch-icon-114x114.png" />
<link rel="Apple-touch-icon" sizes="120x120" href="images/favicon/Apple-touch-icon-120x120.png" />
<link rel="Apple-touch-icon" sizes="144x144" href="images/favicon/Apple-touch-icon-144x144.png" />
<meta name="msapplication-TileImage" content="favicon-144.png" />
<meta name="msapplication-TileColor" content="#ffffff" />
<script>
var baseURL = '<?php echo $baseURL; ?>';
var pageURL = '<?php echo $pageURL; ?>';
var pageName = '<?php echo $pageName; ?>';
var selectedLang = '<?php echo $selectedLang; ?>';
</script>
</head>
<body>
Jetzt funktioniert das nicht und ich denke, ich vermisse wahrscheinlich ein paar Dinge, aber ich konnte keine gute Anleitung oder Richtlinie dazu finden. Ich bin mir auch nicht sicher, ob ich noch etwas tun muss, um die Sitzung zu beginnen und einzurichten.
Kann mir jemand dabei helfen?
Hinweis:
Hier geht es nur darum zu überprüfen, ob ein Benutzer bereits angemeldet ist, da die eigentliche Benutzerregistrierung und -prüfung auf der separaten Anmeldeseite durchgeführt wird und der Code dafür bereits funktioniert.
Update: Das Aktivieren von Fehlermeldungen gibt die folgenden Fehler zurück:
Warning: session_start(): Cannot send session cookie - headers already sent by (output started at /homepages/21/d580042014/htdocs/index.php:2) in /homepages/21/d580042014/htdocs/includes/header.php on line 9
Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /homepages/21/d580042014/htdocs/index.php:2) in /homepages/21/d580042014/htdocs/includes/header.php on line 9
array(0) { }
Warning: Cannot modify header information - headers already sent by (output started at /homepages/21/d580042014/htdocs/index.php:2) in /homepages/21/d580042014/htdocs/includes/header.php on line 12
Notice: Undefined index: lang in /homepages/21/d580042014/htdocs/includes/header.php on line 18
Update:
Gemäß den Kommentaren habe ich nun alles, was sich aktuell in der Kopfzeile befindet, gepostet.
Vielen Dank im Voraus.
Update: Die Frage wurde in chat gelöst.
Ändern Sie diesen Block gemäß Ihrer Bearbeitung:
<!DOCTYPE html>
<html>
<head>
<?php
define("someUnguessableVariable", "anotherUnguessableVariable");
session_start();
if(!(isset($_SESSION['login']) && $_SESSION['login'] != '')){
header ("Location: login.php");
}
zu:
<?php
session_start();
?>
<!DOCTYPE html>
<html>
<head>
<?php
define("someUnguessableVariable", "anotherUnguessableVariable");
if(!isset($_SESSION['login']) && $_SESSION['login'] != ''){
header ("Location: login.php");
exit; // stop further executing, very important
}
<?php
usw. Dies wurde bereits in Kommentaren festgelegt.Verwenden Sie einen Code-Editor wie Notepad ++ https://notepad-plus-plus.org/ und speichern Sie ihn als UTF-8 ohne BOM, wodurch sichergestellt wird, dass es keine Byte-Bestellmarke gibt.
Verwenden Sie außerdem die neue Methode für die Überprüfung Ihres Sitzungsarrays.
if(!isset($_SESSION['login']) && $_SESSION['login'] != ''){
Stellen Sie außerdem sicher, dass keine Ihrer eingeschlossenen/erforderlichen Dateien dieselben Probleme aufweist, einschließlich login.php
.
Fußnoten:
Im Notepad ++ Dropdown-Menü werden Sie sehen
Wenn eine Bytereihenfolge-Marke angezeigt wird, gehen Sie folgendermaßen vor:
Speicher die Datei.
Verweise):
Randnotiz:
Sie sollten $stmt->execute();
in ändern
if(!$stmt->execute()){
trigger_error("there was an error....".$conn->error, E_USER_WARNING);
}
Du musst dich bewegen
session_start();
if((!isset($_SESSION['login']) && $_SESSION['login'] != '')){
header ("Location: login.php");
}
an die Spitze des Scrips und bewegen Sie !
in die Halterung.
Fügen Sie das Benutzerprofil in Session-Variablen in das Skript PHP ein, das Sie nach der Anmeldeseite aufrufen
$_SESSION['user_id'] = $row["user_id"];
$_SESSION['profile_id'] = $row["profile_id"];
$_SESSION['name'] = $row["name"];
$_SESSION['surname'] = $row["surname"];
$_SESSION['application_auth'] = $row["application_auth"];
Fügen Sie den folgenden Code oben auf jeder Seite ein, die Sie durch nicht gültige Benutzer schützen möchten
<?php
include("sessionCheck.php");
?>
Das sessionCheck-Skript In diesem Fall überprüfe ich auch, ob der Benutzer berechtigt ist, die bestimmte Seite mithilfe der Profil-ID anzuzeigen, aber Sie können sie entfernen
<?php
session_start();
if(!IsSet($_SESSION['user_id']) or $_SESSION['profile_id'] !=1)
{
header("location: http://www.yourdomain.com/login.php?message=Invalid user");
}
?>
Der folgende Abschnitt sollte vor include "system/config.php";
gehen, da es so aussieht, als würde diese Datei ausgegeben und auch, dass der folgende Code nicht von anderen Daten abhängig ist.
session_start();
if(!(isset($_SESSION['login']) && $_SESSION['login'] != '')){
header ("Location: login.php");
}
Zweite:
if(!(isset($_SESSION['login']) && $_SESSION['login'] != '')){
Sollte wahrscheinlich sein: if(!isset($_SESSION['login']) && $_SESSION['login'] == ''){
bedeutung == ''
und nicht != ''
Für einen nicht angemeldeten Benutzer wird höchstwahrscheinlich (abhängig von Ihrem Code) kein Wert festgelegt. Der Code überprüft, ob er nicht leer ist, sodass nur angemeldete Benutzer weitergeleitet werden.
Daher:
<?php
define("someUnguessableValue", "anotherUnguessableValue");
session_start();
if(!isset($_SESSION['login']) && $_SESSION['login'] == ''){
header("location:login.php");
}
include "system/config.php";
//.... the rest
?>
<!DOCTYPE html>
<html>
<head>
Wenn keine Weiterleitung erfolgt, ist höchstwahrscheinlich $ _SESSION ['login'] gesetzt. Sie müssen Ihre Cookies für diese Domain löschen.