Condition sur une variable session

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Condition sur une variable session

Re: Condition sur une variable session

par two3d » 15 déc. 2022, 22:52

Ce script d'espace membre pourra t'aider à comprendre le fonctionnement.

Re: Condition sur une variable session

par or 1 » 14 déc. 2022, 19:48

if (isset($_SESSION['username']))
{
echo $_SESSION['username'];
}
else
{
include 'connexion_form.php';
}
si les sessions ne fonctionnent pas. on rentre dans le else.

si l'on retourne sur compte.php après s'être connecté avec succès, alors, on est en method get, cela ne passe pas :
if (isset($_POST['connection']))
{
la session n'est jamais initialisée.

si cela dit :
array (size=1)
'username' => string 'Nom_Prenom' (length=10)
c'est que ce test n'a pas été fait en retournant sur compte.php ou alors que cela fonctionne.

Re: Condition sur une variable session

par Sheush » 14 déc. 2022, 15:17


if(isset($test)){
 echo "test existe";
}
else{
  echo "test n'existe pas";
}
$test = "oui";
if(isset($test)){
 echo "test existe";
}
else{
  echo "test n'existe pas";
}
qu'est-ce que cela va afficher ?
Ce n'est pas le même cas de figure puisqu'on parle de variable de session après un refresh de la page. Session_start() au début de la page devrait récupérer la valeur ['username'] entrée précédemment et ne pas afficher à nouveau le formulaire, non ?

De plus la valeur ['username'] n'est définie que si le formulaire est remplie et envoyé. Donc à priori la position du formulaire dans le code ne devrait même pas influencer la définition ou non de la variable.

Re: Condition sur une variable session

par or 1 » 14 déc. 2022, 14:38


if(isset($test)){
 echo "test existe";
}
else{
  echo "test n'existe pas";
}
$test = "oui";
if(isset($test)){
 echo "test existe";
}
else{
  echo "test n'existe pas";
}
qu'est-ce que cela va afficher ?

Re: Condition sur une variable session

par Sheush » 14 déc. 2022, 14:29

ce qu'il faut tester, c'est si la variable $_SESSION n'est plus vide quand on retourne sur la page compte.php après s'être connecté avec succès. cela doit alors afficher $_SESSION['username'] et non le formulaire de connexion.
Mon dernier message permet de voir qu'une fois "connecté", la session existe bel et bien mais que rien n'est trouvé dans [username] au dessus du formulaire. Sous le formulaire en revanche, il trouve bien ce qu'il y a dedans. En plaçant à nouveau la condition plus bas dans le code, cette fois ci elle est remplie et affiche bien $_SESSION['username']. Comment une variable peut être à la fois définie et non définie sur la même page ? Est ce que c'est normal ?

Re: Condition sur une variable session

par or 1 » 14 déc. 2022, 13:50

ce qu'il faut tester, c'est si la variable $_SESSION n'est plus vide quand on retourne sur la page compte.php après s'être connecté avec succès. cela doit alors afficher $_SESSION['username'] et non le formulaire de connexion.

Re: Condition sur une variable session

par Sheush » 14 déc. 2022, 11:41

Ok déso j'ai envoyé ce message en étant un peu pressé j'ai même pas vu que les identifiants était pas bons... Voilà ce que ça donne avec de bons identifiants :
D:\Wamp\www\verification d'une variable session\compte.php:2:int 2
D:\Wamp\www\verification d'une variable session\compte.php:15:
array (size=0)
empty

Nom d'utilisateur
Mot de passe
Connexion

Connexion à la BDD réussie
Connexion au compte réussie
D:\Wamp\www\verification d'une variable session\compte.php:25:
array (size=1)
'username' => string 'Nom_Prenom' (length=10)

Re: Condition sur une variable session

par Sheush » 13 déc. 2022, 18:10

Merci de vos réponses, voilà ce que ça donne avec les 2 vérifs que vous m'avez proposées :

Déso d'envoyer ça comme ça je sais pas comment envoyer une image sur ce site.
D:\Wamp\www\verification d'une variable session\compte.php:2:int 2
D:\Wamp\www\verification d'une variable session\compte.php:15:
array (size=0)
empty

Nom d'utilisateur
Mot de passe
Connexion

Connexion à la BDD réussie
Identifiants incorrect
D:\Wamp\www\verification d'une variable session\compte.php:25:
array (size=0)
empty
Aussi, j'ai testé ce matin et après un rafraichissement de la page une fois le formulaire envoyé, ça avait finit par marcher. J'avais rien envoyé ici puisque je devais y aller. Je reteste ce soir et là, le rafraichissement ne change plus rien... (Je ne crois pas du tout avoir fait quelque chose de différent dans le code).

Re: Condition sur une variable session

par two3d » 12 déc. 2022, 23:16

Ton "global $db;" sert à rien.
Tu redéfinis une page HTML avec les balises <html></html> dans connexion_form.php : HTML incorrect (n'affecte pas le fonctionnement de PHP ceci dit)

Mets un
var_dump(session_status())
en dessous de
session_start()
pour voir si ta session est bien ouverte.

Codes de retour possibles :

Code : Tout sélectionner

_DISABLED = 0 _NONE = 1 _ACTIVE = 2
Ou simplement entourer session_start() avec var_dump() :
var_dump(session_start()); //doit retourner "true"

Re: Condition sur une variable session

par or 1 » 12 déc. 2022, 18:58

que donne le
var_dump($_SESSION);
placé avant le if ?

Condition sur une variable session

par Sheush » 12 déc. 2022, 17:35

Bonjour tout le monde, j'ai un problème avec l'utilisation des sessions et je vais essayer d'exposer ça le plus clairement possible :

-Mon besoin : À l'aide des infos stockés dans la session, afficher un formulaire de connexion quand l'utilisateur n'est pas identifé, et ne plus l'afficher quand il l'est.
-Mon problème : Dans compte.php, la condition de la ligne 13 ne se remplit jamais alors que le var_dump de la ligne 21 montre que 'username' est bel et bien défini dans $_SESSION.

Ça fait des heures que je cherche en vain une solution, ça serait super que vous puissiez me montrer ce qui ne va pas.

Mon code :

compte.php :

Code : Tout sélectionner

<?php session_start();?> <!DOCTYPE html> <html lang="fr"> <head> <meta charset="utf-8"> <title>Connexion</title> </head> <body> <?php if (isset($_SESSION['username'])) { echo $_SESSION['username']; } else { include 'connexion_form.php'; } var_dump($_SESSION); ?> </body> </html>
connexion_form.php :

Code : Tout sélectionner

<html> <form method="post"> <input type="text" name="username" id="username" placeholder="Nom d'utilisateur" required><br/> <input type="password" name="password" id="password" placeholder="Mot de passe" required><br/> <input type="submit" name="connection" id="connection" value="Connexion"> </form> </html> <?php // Si le formulaire a été envoyé : if (isset($_POST['connection'])) { extract($_POST); // Si les champs ne sont pas vides : if(!empty($username) && !empty($password)) { include 'database_connexion.php'; global $db; // Vérifie que l'username entré existe dans la BDD $q = $db->prepare("SELECT * FROM users WHERE username = :username"); $q->execute(['username' => $username]); $result = $q->fetch(); if ($result == true) { // Vérifie que le mot de passe est bien celui de l'utilisateur indentifié if(password_verify($password, $result['password'])) { echo"<br/> Connexion au compte réussie"; $_SESSION['username'] = $result['username']; } else { echo"<br/> Identifiants incorrect"; } } else { echo"<br/> Identifiants incorrect"; } } } ?>
database_connexion.php

Code : Tout sélectionner

<?php define('HOST', 'localhost'); define('DB_NAME', 'db'); define('USER', 'root'); define('PASS',''); try{ $db = new PDO("mysql:host=" . HOST . ";dbname=" . DB_NAME, USER, PASS); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); echo "<br/> Connexion à la BDD réussie"; } catch(PDOException $e){ echo $e; } ?>