PHP redirection

Utilisation

Pour notre utilisation, nous utilisons la fonction header() en PHP pour renvoyer l'utilisateur du site web vers la page d'authentification suite à une deconnexion ou alors à des variables de session ($_SESSION) qui n'existent pas.

 

************** ATTENTION ****************

La fonction header() doit être appelée avant que le moindre contenu ne soit envoyé, soit par des lignes HTML habituelles dans le fichier, soit par des affichages PHP. Une erreur très classique est de lire un fichier avec les fonction include ou require, et de laisser des espaces ou des lignes vides, qui produiront un affichage avant que la fonction header() ne soit appelée. Le même problème existe avec les fichiers PHP/HTML standards.
Les redirections sont des en-têtes HTTP. Or, selon le protocole HTTP, les en-têtes HTTP doivent être envoyés avant tout autre type de contenu, ce qui signifie qu'aucun caractère ne doit être envoyé avant l'appel de la fonction header, pas même un espace !
En d'autre termes, la fonction header() doit impérativement être utilisée avant tout code HTML.

 

Ci-dessous un exemple qui montre comment utiliser header pour renvoyer l'utilisateur vers la page d'authentification. On teste ici l'existence et la valeur d'une variable de session. Si cette variable n'existe pas (l'utilisateur n'es pas authentifié) et que cette variable vaut 0, le test if renvoie automatiquement l'utilisateur à la page formulaire.php

Exemple

<?php

	// Démarre une nouvelle session ou reprend une session existante
								
	session_start();

	// test d'existence de la variable de session auth
    // si $_SESSION["auth"] n'existe pas OU
    // si $_SESSION["auth"] == 0 alors
    // on redirige l'utilisateur vers le formulaire d'authentification
	// sinon, le reste de la page s'exécute 
	
	if ( !isset($_SESSION["auth"]) || $_SESSION["auth"] == 0 )
	{
		// redirection
		header("location:formulaire.php");
	} 

?>


<!DOCTYPE html>

<html>

	<head>
		<title>Exemple</title>
		<meta charset="UTF-8" />
	</head>

<body>

...

</body>

</html>