8768 sujets

Développement web côté serveur, CMS

Bonjour,

je fait appel à votre aide SVP, car j'ai un petit problème.

En fait avec un admin que j'ai fait (mini CMS), je souhaite que personne puisse entrer dans l'admin si n'est pas identifié.
J'ai donc fait cette fonction:

// ne pas pouvoir entrée dans admin si non-identifié
function isConnected() {
    if(!isset($_SESSION['logged']) || $_SESSION['logged'] != true) {
        header('Location:login.php');
    }
}


Donc si on essaye d'entrer sans être identifié dans la page:
www.mon-site.com/admin/index.php
on sera redirigé vers la page où on doit s'identifier:
www.mon-site.com/admin/login.php
Là ok ça marche,

par contre si on essaye de d'entrer sans être identifié dans la page (qui est dans un sous-dossier):
www.mon-site.com/admin/dossier/index.php
ça fait erreur 404.

J'ai remarque que si dans ma fonction je remplace

header('Location:login.php');

par:

header('Location:../login.php');

pour les pages qui sont dans des sous-dossiers ça fonctionne, mais ça ne fonctionne plu pour les pages qui ne sont pas dans des sous-dossiers.

Comment peut on faire SVP?

J'avais essayé de faire ceci:

// ne pas pouvoir entrée dans admin si non-identifié
function isConnected() {
    if(!isset($_SESSION['logged']) || $_SESSION['logged'] != true) {
         if(defined('SOUS_DOSS')) {
	      header('Location:../login.php');
         }
         else {
	     header('Location:login.php');
         }
    }
}

et aussi en mettant en haut de mes pages qui sont dans des sous-dossiers ceci:
define('SOUS_DOSS', 'EXISTE');define('SOUS_DOSS', 'EXISTE');

Mais sans succès.

Merci beaucoup.
Modérateur
Bonjour,

comme toujours dans ces cas là le plus simple est de partir de la racine du site en absolu:

header('Location:/admin/login.php');


Si le site risque de bouger dans des sous-dossier, alors il faut utiliser des constantes:


// à la racine: 
define('ROOT_URL', $_SERVER[je sais plus]);

// APPEL:
header('Location:'.ROOT_URL.'/admin/login.php');
Si tu ne met pas un exit/die après ta redirection il suffit de désactiver les redirections dans son naviagteur pour accéder à ton admin sans avoir besoin de s'identifier.


// ne pas pouvoir entrée dans admin si non-identifié
function isConnected() {
    if(!isset($_SESSION['logged']) || $_SESSION['logged'] != true) {
        header('Location:login.php');
        exit; // <- pwned or die
    }
}

Modifié par tempif (12 Mar 2015 - 18:54)