Bonjour,

Voila je rencontre un petit problème avec mon code.

Ca me semble évident qu'il faut pouvoir se déconnecter donc j'ai fais quelque chose (pas très propre) pour afficher Connexion et Contact quand on est pas connecté et Déconnexion quand on l'est.

pages/users/ifLogged.php

use \Core\Auth\DbAuth;

$app = App::getInstance();

$auth = new DbAuth($app->getDb());

var_dump(isset ($_SESSION['auth'])); //Un petit var_dump dans le menu pour vérifier quand je suis connecté ou non
var_dump($auth->logged());

$Connexion=False;
if ($auth->logged())
{
    $Connexion=$_SESSION['auth'];
}
else
{
    $_SESSION['auth']=False;
    $Connexion=$_SESSION['auth'];
}

if($Connexion == $_SESSION['auth'])
{
    //mon menu
    App\Navbar::submenu('Admin','admin.php');
    App\Navbar::submenu('Deconnexion','index.php?p=deco');
}
else
{
    //mon menu
    //Navbar est une classe que j'ai écrit pour simplifié la visualisation du menu bootstrap
    App\Navbar::submenu('Contact','#');
    App\Navbar::submenu('Connexion','index.php?p=login');
}

Pour deco.php, j'ai fais ça (sachant que si je fais un session_start() au début, il me dit qu'une session a déjà été initalisé et que celle-la est ignorée.

<?php
$_SESSION['auth'] = array();
session_unset($_SESSION['auth']);
session_destroy();
exit();
?>

J'ai un peu tout essayé ici et rien ne fonctionne dans cette page.
Quand je clique sur Déconnexion, mon booléen est à true, quand je clique sur une autre page, il passe à false. Mais, mon menu ne change pas et si je retroune encore sur une autre page, il repasse à true O_o

Voici ma classe DbAuth

<?php

/**
 * Created by PhpStorm.
 * User: Shady
 * Date: 01/07/2016
 * Time: 14:57
 */
namespace Core\Auth;
use Core\Database;

class DbAuth
{
    private $db;

    public function __construct(Database $db)
    {
        $this->db = $db;
    }

    public function login($username, $password){
        $user = $this->db->prepare('SELECT * FROM user WHERE pseudo = ?', [$username], null, true);
        if($user)
        {
            if($user->mdp === sha1($password)){
                $_SESSION['auth'] = $user->id;
                return true;
            }

        }
        return false;
    }

    public function logged(){

        return isset($_SESSION['auth']);
    }

    public function getUserId(){
        if($this->logged()){
            return $_SESSION['auth'];
        }
        return false;
    }

}

J'ai pas de session_start() qui traîne à droite à gauche, juste le TP de Grafikart. Mais je suis débutante en PHP et je n'ai jamais fais de session, et là comme on est en POO, je sais pas comment gérer les sessions car partout pour débuter on utilise mysqli_connect et non pas PDO, sans compter qu'on utilise pas la POO non plus. J'ai regardé Les sessions plus sécurisés de Grafikart, mais rien n'y fait pour régler ce problème, je sais même pas comment régler la durée de ma session. Merci.

2 réponses


J'ai trouvé le problème, c'est ifLogged.php qui fait tout planté... Et en plus j'ai une erreur sur tous mes headers...

Warning: Cannot modify header information - headers already sent by (output started at C:\wamp\www\site_aikido\public\admin.php:41) in C:\wamp\www\site_aikido\app\App.php on line 52
Call Stack
#   Time    Memory  Function    Location
1   0.0003  253000  {main}( )   ..\admin.php:0
2   0.0035  337592  App->forbidden( )   ..\admin.php:56
3   0.0035  337728  header ( )  ..\App.php:52

Ca me fait ça à chaque fois que j'utilise un header.

ifLogged est devenu

<?php
use \Core\Auth\DbAuth;

$app = App::getInstance();

$auth = new DbAuth($app->getDb());

var_dump(isset ($_SESSION['auth']));
var_dump($auth->logged());

if($auth->logged())
{
    \App\Navbar::dropdown_open('Aikido');
    \App\Navbar::submenu( 'Présentation', '#');
    \App\Navbar::submenu('Pour qui ?', '#');
    \App\Navbar::submenu('Le matériel', '#');
    \App\Navbar::dropdown_close();

    \App\Navbar::dropdown_open('Jodo');
    \App\Navbar::submenu( 'Présentation', '#');
    \App\Navbar::submenu('Pour qui ?', '#');
    \App\Navbar::submenu('Le matériel', '#');
    \App\Navbar::dropdown_close();

    \App\Navbar::dropdown_open('Inscriptions');
    \App\Navbar::submenu( 'Tarifs','#');
    \App\Navbar::submenu('Stages du club','#');
    \App\Navbar::dropdown_close();

    \App\Navbar::dropdown_open('Le Dojo');
    \App\Navbar::submenu( 'Les enseignants','#');
    \App\Navbar::submenu('Les dirigeants','#');
    \App\Navbar::submenu('La pratique du Dojo','#');
    \App\Navbar::dropdown_close();

    App\Navbar::submenu('Admin','admin.php');
    App\Navbar::submenu('Deconnexion','index.php?p=deco');
}
else
{
    \App\Navbar::dropdown_open('Aikido');
    \App\Navbar::submenu( 'Présentation', '#');
    \App\Navbar::submenu('Pour qui ?', '#');
    \App\Navbar::submenu('Le matériel', '#');
    \App\Navbar::dropdown_close();

    \App\Navbar::dropdown_open('Jodo');
    \App\Navbar::submenu( 'Présentation', '#');
    \App\Navbar::submenu('Pour qui ?', '#');
    \App\Navbar::submenu('Le matériel', '#');
    \App\Navbar::dropdown_close();

    \App\Navbar::dropdown_open('Inscriptions');
    \App\Navbar::submenu( 'Tarifs','#');
    \App\Navbar::submenu('Stages du club','#');
    \App\Navbar::dropdown_close();

    \App\Navbar::dropdown_open('Le Dojo');
    \App\Navbar::submenu( 'Les enseignants','#');
    \App\Navbar::submenu('Les dirigeants','#');
    \App\Navbar::submenu('La pratique du Dojo','#');
    \App\Navbar::dropdown_close();

    App\Navbar::submenu('Contact','#');
    App\Navbar::submenu('Connexion','index.php?p=login');
}

Mais quand je me connecte, j'ai toujours cette erreur de header...

Comme mon code est un bordel sans nom (le php est bien mélangé au HTML dans certaines pages car je sais pas comment faire pour inclure du php "proprement"), j'ai fais des redirection comme ça

<meta http-equiv="refresh" content="0; index.php?p=home">

Mais j'aimerais bien quelques conseilles pour habiller de HTML mon code PHP sans inclure le HTML directement dans le PHP ce qui fait que le header ne fonctionne pas.