Je suis nouveau sur PHP et j'ai des difficultés avec les éléments suivants:
J'ai une page où je veux vérifier si quelqu'un est un utilisateur enregistré avant de lui permettre de voir le contenu du site. Je pensais donc que, dans mon fichier d’en-tête (qui est référencé sur toutes les pages individuelles via require_once("includes/header.php");
), je peux le vérifier et les rediriger vers une page de connexion (login.php
) s’ils ne se sont pas encore connectés.
Alors voici tout ce que j'ai dans ma tête:
<!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>
Maintenant, cela ne fonctionne pas et je pense que je manque probablement quelques éléments, mais je ne pouvais pas trouver un bon tutoriel ou des directives à ce sujet. De plus, je ne suis pas sûr qu’il me reste à faire quelque chose pour démarrer et configurer la session.
Quelqu'un peut il m'aider avec ça ?
Remarque:
Il s’agit uniquement de vérifier si un utilisateur est déjà connecté, étant donné que tous les enregistrements et vérifications de l’utilisateur se font sur la page de connexion distincte et que le code est déjà opérationnel.
Mise à jour: L'activation des messages d'erreur renvoie les erreurs suivantes:
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
Mettre à jour:
Conformément aux commentaires, je publie maintenant tout ce qui est actuellement dans l'en-tête.
Merci d'avance.
Mise à jour: La question a été résolue dans chat .
Selon votre édition, changez ce bloc:
<!DOCTYPE html>
<html>
<head>
<?php
define("someUnguessableVariable", "anotherUnguessableVariable");
session_start();
if(!(isset($_SESSION['login']) && $_SESSION['login'] != '')){
header ("Location: login.php");
}
à:
<?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
etc. cela a déjà été établi dans les commentaires.Utilisez un éditeur de code tel que Notepad ++ https://notepad-plus-plus.org/ et sauvegardez-le au format UTF-8 sans nomenclature, ce qui garantira l'absence de marque d'ordre d'octet.
En outre, en utilisant la nouvelle méthode pour votre vérification de groupe de sessions.
if(!isset($_SESSION['login']) && $_SESSION['login'] != ''){
Vérifiez également qu'aucun des fichiers inclus/requis ne présente les mêmes problèmes, y compris login.php
.
Notes de bas de page:
Dans le menu déroulant du Notepad ++, vous verrez
S'il affiche une marque d'ordre d'octet, procédez comme suit:
Enregistrez le fichier.
Références):
Sidenote:
Vous devriez changer $stmt->execute();
en
if(!$stmt->execute()){
trigger_error("there was an error....".$conn->error, E_USER_WARNING);
}
Tu dois bouger
session_start();
if((!isset($_SESSION['login']) && $_SESSION['login'] != '')){
header ("Location: login.php");
}
en haut du script et déplacez !
dans le support.
Placez le profil de l'utilisateur dans les variables de session dans le script PHP que vous appelez après la page de connexion.
$_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"];
Placez le code suivant en haut de chaque page que vous souhaitez protéger par des utilisateurs non valides
<?php
include("sessionCheck.php");
?>
Le script sessionCheck Dans ce cas, je vérifie également si l'utilisateur est autorisé à afficher la page spécifique à l'aide de l'identifiant profile_id mais vous pouvez la supprimer
<?php
session_start();
if(!IsSet($_SESSION['user_id']) or $_SESSION['profile_id'] !=1)
{
header("location: http://www.yourdomain.com/login.php?message=Invalid user");
}
?>
La partie suivante devrait aller avant include "system/config.php";
car il semble que ce fichier est en sortie et aussi le fait que le code suivant ne dépend d'aucune autre donnée.
session_start();
if(!(isset($_SESSION['login']) && $_SESSION['login'] != '')){
header ("Location: login.php");
}
Seconde:
if(!(isset($_SESSION['login']) && $_SESSION['login'] != '')){
Devrait probablement être: if(!isset($_SESSION['login']) && $_SESSION['login'] == ''){
signifiant == ''
et non != ''
Un utilisateur non connecté n'aura probablement pas de valeur (en fonction de votre code) afin que votre code vérifie s'il n'est pas vide et que seuls les utilisateurs connectés seront transférés.
Par conséquent:
<?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>
Si ce n'est pas le cas, alors $ _SESSION ['login'] est probablement défini, vous devez effacer les cookies de ce domaine.