Bonjour,
J'apprends la POO en PhP (dans un cas concret), et je m'amuse à crée un mini-site, et je me suis fais une petite classe pour gérer les redirections (au niveau des permission, 3 niveaux d'utilisateurs : membre / client / admin), voilà mon code :
<?php
/**
* Redirect user in member area, or client area, or admin area
* See if cookies is here, if so, redirect user
*/
class Redirect{
private $host = 'http://localhost/poo'; // URL to redirect
/**
* Redirect user if cookie, or session exist
*/
public function user()
{
if(isset($_COOKIE['remember']))
{
require 'Database.php'; // Access to database
// Verify if token exist
$req = $db->prepare("SELECT token, type, id FROM users WHERE token = ?");
$req->execute(array($_COOKIE['remember']));
$cookie = $req->rowCount();
if($cookie == 1)
{
// If cookie true
$cookie = $req->fetch();
$_SESSION['type'] = $cookie['type'];
$_SESSION['id'] = $cookie['id'];
}else{
// If cookie false
}
}
// If sessions exists we redirect user in function of the type
if(isset($_SESSION['type']))
{
$session = $_SESSION['type']; // Get type of user (admin, member, client)
switch($session)
{
case 'member':
header("Location:".$this->host."/member");
case 'client':
header("Location:".$this->host."/client");
case 'admin':
header("Location:".$this->host."/dashboard");
}
}else{ // Else, redirect to login form
header('Location:'.$this->host."/login");
}
}
}
?>
Le problème est que du coup, il me redirige trop de fois vers login.php, je voudrais que quand quelqu'un arrive sur l'espace membre et que son type n'est pas membre (ou qu'il nest pas log (donc pas de sessions)) qu'il soit redirigé vers login.php, pareil pour les autres. Mais le problème, c'est que en arrivant sur login.php, il rappelle la class à chaque fois et refait la redirection vers login.php à chaque fois!
Je n'ai pas d'idées de comment faire pour règler le problème! Merci de m'avoir lu!
Cordialement.
Bonjour.
Pour commencer, est-ce que tu démarres bien ta session avant l'appel à cette classe ?
Ensuite, lors de ton utilisation de switch
, il te faudrait utiliser l'instruction break
, de manière à ce que le switch
se termine lorsqu'un cas est rencontré, soit par exemple :
switch($session) {
case 'member':
header("Location: " . $this->host . "/member");
break;
case 'client':
header("Location: " . $this->host . "/client");
break;
case 'admin':
header("Location: " . $this->host . "/dashboard");
break;
}
Pour faire simple, étant donné que tu ne dois à aucun moment rentrer dans la condition if(isset($_SESSION['type']))
, tu es en permanence redirigé vers la page login.php.
Bonjour,
Merci de votre réponse.
Je me suis sûrement mal exprimé, tout marche bien, j'initialise ma session avant, oui. Le problème est que, login est chargé indéfiniment, et je sais pas comment faire pour que la redirection ne se fasse qu'une fois, c'est à dire que si j'arrive sur client et que je suis pas un client -> redirection vers login.php : Alors que, là ça fait : pas client -> redirection vers login.php jusqu'à : localhost vous a redirigé à de trop nombreuses reprises.
J'espère avoir été un peu plus clair cette fois, merci ^^
Cordialement.
Salut
Essaye plutot ca
if(!isset($_COOKIE['remember']))
Penses ensuite a assigner une valeur a cette clé