Problème de session qui se crée toute de seule

Le problème exposé dans ce sujet a été résolu.

Bonjour à tous et à toutes,

j'ai suivi le tuto de http://www.nicwalle.com/index.php?page=watch&list=creer-un-blog-20 pour créer un site. J'ai fini de coder la première version que je vais mettre en ligne. Cependant lorsque je mets le site en ligne, je rencontre un problème que je n'ai pas en local c'est à dire que lorsqu'on fait http://developpement.irobotechart.com/admin/ on est tout de suite connecté. Mais on ne possède pas d'adresse mail, elle est nul car lorsqu'on est connecté cela affiche Vous êtes connecté [adresse_mail] ! Du coup une session est créé sans adresse mail. Lorsqu'on se login avec un compte cela fonctionne.

Pour résumé, une session est automatiquement créée, je vous mets différentes pages de l'admin, mais s'il vous manque du code pour m'aider, n'hésitez pas à me le dire car je n'ai aucune idée de ce que je dois vous donner.

index.php

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
<?php
include '../functions/main-functions.php';

$pages = scandir('pages/');
if(isset($_GET['page']) && !empty($_GET['page'])){
    if(in_array($_GET['page'].'.php',$pages)){
        $page = $_GET['page'];
    }else{
        $page = "error";
    }
}else{
    $page = "dashboard";
    unset($_SESSION['admin']);
}

$pages_functions = scandir('functions/');
if(in_array($page.'.func.php',$pages_functions)){
    include 'functions/'.$page.'.func.php';
}

?>


<!DOCTYPE html>
<html>
<head>
    <link href="http://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
    <link type="text/css" rel="stylesheet" href="../css/materialize.css"  media="screen,projection"/>
    <link rel="stylesheet" type="text/css" href="markitup/skins/markitup/style.css" />
    <link rel="stylesheet" type="text/css" href="markitup/sets/markdown/style.css" />
    <title>iRoboTechArt | Administration</title>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
</head>

<body>

<?php

if($page != 'login' && $page != 'new' && !isset($_SESSION['admin'])){
    header("Location:index.php?page=login");
}

include "body/topbar.php";
?>
<div class="container">
    <?php
    include 'pages/'.$page.'.php';
    ?>
</div>


<!--Import jQuery before materialize.js-->
<script type="text/javascript" src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
<script type="text/javascript" src="../js/materialize.js"></script>
<script type="text/javascript" src="../js/script.js"></script>
<?php
$pages_js = scandir('js/');
if(in_array($page.'.func.js',$pages_js)){
    ?>
    <script type="text/javascript" src="js/<?= $page ?>.func.js"></script>
<?php
}

?>
<script type="text/javascript" src="markitup/jquery.markitup.js"></script>
<script type="text/javascript" src="markitup/sets/markdown/set.js"></script>
<script type="text/javascript" >
    $(document).ready(function() {
        mySettings.previewParserPath = 'parser.php';
        $(".markItUp").markItUp(mySettings);
    });
</script>
</body>
</html>

login.php

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
<?php
    if(isset($_SESSION['admin'])){
        header("Location:index.php?page=dashboard");
    }
?>

<div class="row">
    <div class="col l4 m6 s12 offset-l4 offset-m3">
        <div class="card-panel">
            <div class="row">
                <div class="col s6 offset-s3">
                    <img src="../img/admin.png" alt="Administrateur" width="100%"/>
                </div>
            </div>

            <h4 class="center-align">Se connecter</h4>

            <?php
                if(isset($_POST['submit'])){
                    $email = htmlspecialchars(trim($_POST['email']));
                    $password = htmlspecialchars(trim($_POST['password']));

                    $errors = [];

                    if(empty($email) || empty($password)){
                        $errors['empty'] = "Tous les champs n'ont pas été remplis!";
                    }else if(is_admin($email,$password) == 0){
                        $errors['exist']  = "Cet administrateur n'existe pas";
                    }

                    if(!empty($errors)){
                        ?>
                        <div class="card red">
                            <div class="card-content white-text">
                                <?php
                                    foreach($errors as $error){
                                        echo $error."<br/>";
                                    }
                                ?>
                            </div>
                        </div>
                        <?php
                    }else{
                        $_SESSION['admin'] = $email;
                        header("Location:index.php?page=dashboard");
                    }

                }


            ?>

            <form method="post">
                <div class="row">
                    <div class="input-field col s12">
                        <input type="email" id="email" name="email"/>
                        <label for="email">Adresse email</label>
                    </div>

                    <div class="input-field col s12">
                        <input type="password" id="password" name="password"/>
                        <label for="password">Mot de passe</label>
                    </div>
                </div>

                <center>
                    <button type="submit" name="submit" class="waves-effect waves-light btn light-blue">
                        <i class="material-icons left">perm_identity</i>
                        Se connecter
                    </button>
                    <br/><br/>
                    <a href="index.php?page=new">Nouveau modérateur</a>
                </center>




            </form>

        </div>
    </div>
</div>

main-function.php

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<?php

    //A modifier en fonction de vos indentifiants de base de donnée
    $dbhost = 'rempli';
    $dbname = 'rempli';//Ne doit pas être modifié si vous avez appelé votre bdd "blog"
    $dbuser = 'rempli';
    $dbpswd = 'rempli';
    //A partir d'ici, vous ne devez plus rien modifier

    try{
        $db = new PDO('mysql:host='.$dbhost.';dbname='.$dbname,$dbuser,$dbpswd,array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8', PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING));
    }catch(PDOexception $e){
        die("Une erreur est survenue lors de la connexion à la base de données");
    }
// Définition des rôles
function admin(){
    if(isset($_SESSION['admin'])){
        global $db;
        $a = [
            'email'     =>  $_SESSION['admin'],
            'role'      =>  'admin'
        ];

        $sql = "SELECT * FROM admins WHERE email=:email AND role=:role";
        $req = $db->prepare($sql);
        $req->execute($a);
        $exist = $req->rowCount($sql);

        return $exist;
    }else{
        return 0;
    }
}



function hasnt_password(){
    global $db;

    $sql = "SELECT * FROM admins WHERE email = '{$_SESSION['admin']}' AND password = ''";
    $req = $db->prepare($sql);
    $req->execute();
    $exist = $req->rowCount($sql);
    return $exist;
}

dashboard.php

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
<?php

if(hasnt_password() == 1){
    header("Location:index.php?page=password");
}

if(director()==1){
    header("Location:index.php?page=video");
}

?>


<h2>Tableau de bord</h2>
<div class="row">
   <pre>
    <?php
    echo "Vous êtes connecté ".$_SESSION['admin'] ." !";
    ?>
</pre>

Merci d'avance pour votre aide et si j'ai mal formulé ou vous avez besoin de plus d'infos, demandez moi ^^

+0 -0

En fait, cette fonction doit être appelée avant que tu accède aux variables $_SESSION.

Donc ça depend du reste de ton code. Si, par exemple, tu inclus une page "first.php" dans chacune de tes pages, alors tu la mettra dedans. ;)

Dans le code que tu as donné, ça n'a pas l'air d'être le cas. Donc tu dois le mettre en première ligne dans les fichiers index.php et login.php.

Edit : Mais je pense s'avoir d'où viens le problème. Pourrez-tu nous montrer le code de la page de déconnexion s'il te plait ?

+1 -0

D'accord je vais tenter le session_start()comme tu me l'as dit. Voici le code de ma page de déconnexion :

1
2
3
<?php
    unset($_SESSION['admin']);
    header("Location:../");

Sinon merci d'être en train d'essayer de m'aider ^^

Edit : J'ai mit le session_start() et cela ne fonctionne pas mieux ;(

+0 -0

Je pense que le problème viens du fait que ta variable $_SESSION['admin'] existe, mais est vide.

Dans ton fichier index.php, ligne 40, remplace ta condition par celle-ci :

1
2
<?php
if($page != 'login' && $page != 'new' && (!isset($_SESSION['admin'] || empty($_SESSION['admin']))){

Par contre, tu fait un header("Location:index.php?page=login"); ligne 41 (toujours dans le même fichier). Il me semble que pour que cela fonctionne, il faut faire un header('Location: [...]'); AVANT tout code HTML, ce qui n'est pas le cas dans ton code.

Tu dois donc tester si il est connecté au tout début de ton fichier.

Essaye donc ces deux choses, et regarde si cela fonctionne. ;)

+1 -0

Voilà merci encore d'essayer de m'aider :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
<?php
if(session_status() == PHP_SESSION_NONE){
    session_start();
}

if($page != 'login' && $page != 'new' && (!isset($_SESSION['admin'] || empty($_SESSION['admin']))){
    header("Location:index.php?page=login");
}

include '../functions/main-functions.php';

$pages = scandir('pages/');
if(isset($_GET['page']) && !empty($_GET['page'])){
    if(in_array($_GET['page'].'.php',$pages)){
        $page = $_GET['page'];
    }else{
        $page = "error";
    }
}else{
    $page = "dashboard";
    unset($_SESSION['admin']);
}

$pages_functions = scandir('functions/');
if(in_array($page.'.func.php',$pages_functions)){
    include 'functions/'.$page.'.func.php';
}



?>


<!DOCTYPE html>
<html>
<head>
    <link href="http://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
    <link type="text/css" rel="stylesheet" href="../css/materialize.css"  media="screen,projection"/>
    <link rel="stylesheet" type="text/css" href="markitup/skins/markitup/style.css" />
    <link rel="stylesheet" type="text/css" href="markitup/sets/markdown/style.css" />
    <title>iRoboTechArt | Administration</title>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
</head>

<body>

<?php

include "body/topbar.php";
?>
<div class="container">
    <?php
    include 'pages/'.$page.'.php';
    ?>
</div>


<!--Import jQuery before materialize.js-->
<script type="text/javascript" src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
<script type="text/javascript" src="../js/materialize.js"></script>
<script type="text/javascript" src="../js/script.js"></script>
<?php
$pages_js = scandir('js/');
if(in_array($page.'.func.js',$pages_js)){
    ?>
    <script type="text/javascript" src="js/<?= $page ?>.func.js"></script>
<?php
}

?>
<script type="text/javascript" src="markitup/jquery.markitup.js"></script>
<script type="text/javascript" src="markitup/sets/markdown/set.js"></script>
<script type="text/javascript" >
    $(document).ready(function() {
        mySettings.previewParserPath = 'parser.php';
        $(".markItUp").markItUp(mySettings);
    });
</script>
</body>
</html>
+0 -0

J'ai essayé mais cela ne fonctionne toujours pas :(, par contre on m'a dit de mettre ça :

1
2
3
if(session_status() == PHP_SESSION_NONE){
    session_start();
}

Mais maintenant j'ai une nouvelle erreur mais je pense qu'on avance :

La page developpement.irobotechart.com ne fonctionne pas

developpement.irobotechart.com vous a redirigé à de trop nombreuses reprises. Essayez de supprimer les cookies.. ERR_TOO_MANY_REDIRECTS

Cependant quand j'enlève ça le message ne s'affiche pas et je rencontre toujours le problème que j'ai dit plus haut:

1
2
3
if($page != 'login' && $page != 'new' && !isset($_SESSION['admin'])){
    header("Location:index.php?page=login");
}

J'en déduis donc que c'est à cause de ce bout de code qu'il y a une infinité de redirection, mais je ne sais toujours pas résoudre le problème.

Voilà merci encore d'essayer de m'aider :

1
2
3
4
5
6
7
<?php
//[...]
if($page != 'login' && $page != 'new' && (!isset($_SESSION['admin'] || empty($_SESSION['admin']))){
    header("Location:index.php?page=login");
}

include '../functions/main-functions.php';

Fatavis

Il y a une erreur de syntaxe, il manque une paranthèse, tu as :

1
<?php (!isset($_SESSION['admin'] || empty($_SESSION['admin']))

au lieu de :

1
<?php (!isset($_SESSION['admin']) || empty($_SESSION['admin']))

Pour une question de "bonne utilisation" et de sécurité :

Quand tu utilises "header(…)" il doit :

  • Être avant l'affichage de texte/html, sinon tu dois utiliser la temporisation de sortie.
  • L'utiliser avec die(header(…)), sinon le code qui suit va être exécuté (notamment pour ta page login.php).

Il y a une erreur de syntaxe, il manque une paranthèse, tu as :

1
<?php (!isset($_SESSION['admin'] || empty($_SESSION['admin']))

au lieu de :

1
<?php (!isset($_SESSION['admin']) || empty($_SESSION['admin']))

A-312

Au temps pour moi, c'est de ma faute. :p

Je n'avais pas fait attention quand je lui ai donné ce code. ;)

+1 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte