-2
votes

Ne comprenez pas pourquoi $ _Session est nécessaire

J'ai essayé de créer un formulaire de connexion à partir d'un exemple. J'ai fait ça marche mais je ne comprends pas.

pourquoi $ _ session ['umsco'] code> est requis et pourquoi dois-je attribuer la variable code> $ (code> $). Je ne comprends pas non plus si conn-> ferme () code> requis et quel est le résultat $ code> variable. P>

// I include the database file so we can get the information from there and apply it in here as well.
include "dbc.php";

// here we select the variables we want from the table 'members'.
$sql = "SELECT id, firstName, lastName FROM members";

// here we do something that I dont really know but this is standard procedure.
$result = mysqli_query($conn, $sql);

// declaring username
$username = $_POST["username"];
$password = $_POST["password"];


// my result thing, again, standard procedure.
$result = $conn->query($sql);

// we insert all values in row, standard procedure.
$row = $result->fetch_assoc();

// here we check if the username is the same as the database.
if ($username == $row["firstName"]) {
    // if it's correct then we start a session
    session_start();
    // we give a session some random letters or numbers and set it to $username, not exactly sure why, but it wont work without it.
    $_SESSION['umsco'] = $username; 
    // we change the location to secrect.php
    header("location: secret.php");
}

// we close the connection, not sure if this is needed, but it seems logical.
$conn->close();


4 commentaires

TutorialSpoint.com/php/php_sessions.htm . Le point d'utiliser la session ici est d'enregistrer le fait que l'utilisateur est connecté avec succès. De cette façon quand ils essaient d'aller à une autre page qui est privé, vous n'avez pas besoin de leur demander à nouveau leur nom d'utilisateur et leur mot de passe, vous venez de vérifier leur session pour voir s'il s'est déjà connecté


$ résultat = mysqli_query ($ Conn, $ SQL); et $ résultat = $ Conn-> requête ($ SQL); sont deux façons de faire la même chose - ils les deux exécutent votre requête SQL (c'est-à-dire qu'ils envoient le texte SQL à la base de données, ce qui l'exécute et redonne le résultat. Résultat $ puis contient le résultat de la requête. Mais vous n'avez pas besoin de ces deux lignes, sinon vous n'avez pas besoin de ces lignes Exécutez la même requête deux fois. Une version est suffisante. PHP.net/manual/fr /mysqli.query.php


$ rang = $ Résultat-> fetch_assoc (); puis récupère la première ligne à partir des résultats de la requête et la met dans la variable $ à ligne afin que vous puissiez utiliser les données de cette ligne de votre programme. Dans les cas où vous vous attendez à ce que la requête renvoie de nombreuses lignes, vous enfermeriez cette ligne dans une boucle, ce qui le fait récupérer chaque rangée jusqu'à ce qu'il n'y ait plus de rangées à traiter. php.net/manual/fr/class.mysqli-result.php < / a> et php.net/manual/fr/mysqli- résultat.fetch-assoc.php . Tous les liens que je donne ont des exemples d'utilisation que vous pouvez étudier


Un autre problème logique dans votre code ci-dessus est que votre SQL revient simplement tous les membres. Vous n'avez pas essayé de le faire correspondre au nom d'utilisateur et mot de passe entré. Vous avez besoin d'une clause WHERE pour le dire de renvoyer la ligne où le nom d'utilisateur correspond à la valeur entrée par l'utilisateur et que le mot de passe correspond à la valeur entrée par l'utilisateur. Ensuite, si vous obtenez une ligne de retour, vous savez que l'utilisateur est valide. Si vous ne récupérez pas de rangées, l'utilisateur n'est pas valide.


4 Réponses :


2
votes

Je vous conseille de TOUJOURS Mettre en œuvre session_start () au début de votre code pour éviter le mauvais comportement.


Qu'est-ce qu'une session

Pour comprendre, vous devez comprendre ce qu'est une session PHP est.

Une session est un moyen de garder les variables sur toutes les pages de votre site pour un utilisateur actuel.

Comment ça marche

Tout d'abord, vous devez demander à PHP d'initialiser la session. Pour ce faire, vous devez ajouter session_start () au début de votre code.

Lorsque le serveur répond au client, il appendit un cookie appelé phpsessid qui contient l'identifiant unique de la session de l'utilisateur.

à chaque demande, le navigateur envoie ce cookie sur le serveur afin que PHP puisse récupérer la session à partir du disque dur du serveur.

La manière la plus commune d'enregistrer une variable de session est _ session ['clé'] = valeur de $; . .

Réponse finale

Pour terminer, la ligne $ _ session ['umsco'] = $ nom d'utilisateur; stocke le nom d'utilisateur de l'utilisateur dans sa session jusqu'à.

  • La session est détruite avec session_destroy ()
  • la session expire après un temps défini dans php.ini
  • Vous désenregistrez la variable.

    in secrets.php Vous êtes probablement vérifier si cette valeur est attribuée ou si la session existe pour vérifier si l'utilisateur est connecté. C'est pourquoi c'est obligatoire, sinon une forme de connexion n'aurait aucune signification.

    Un autre Ressource: fermeture de la connexion MySQL IMPORTANT?


0 commentaires

0
votes

Le résultat est que la prochaine fois que vous appelle

session_start();
$loggedUserName = $_SESSION['umsco'];


0 commentaires

0
votes

Tout d'abord, vous devez interroger des membres où le nom d'utilisateur et le mot de passe correspondent à $ _Post Data.

Deuxièmement, tout ce qui est stocké en $ _session variable sera disponible entre les demandes. En règle générale, vous souhaitez "mémoriser" l'ID utilisateur ou similaire, vous n'avez donc pas besoin de soumettre Nom d'utilisateur / mot de passe et répéter la recherche de membre avec chaque demande.

Voir plus Description élaborée ici: https: // www. johnmorrisonline.com/build-php-login-formance-Sessions/


0 commentaires

0
votes

Ce que d'autres ont dit à propos de la variable $ _session est correcte. Si vous utilisez session_start (); ces valeurs peuvent être persistées sur plusieurs demandes du navigateur des utilisateurs. La valeur $ _Session sera particulière à l'utilisateur visitant votre site.

En ce qui concerne l'objet $ de résultat, $ Résultat-> fetch_assoc (); n'atteindra qu'une ligne de votre table. Donc, votre code actuel ne fonctionnerait que si le nom d'utilisateur correspond à la 1ère ligne de la table de vos membres. Il serait préférable d'interroger uniquement des lignes où le nom d'utilisateur correspond à ce qu'ils ont entré. NOTE Il y a un grand risque de sécurité si vous venez de concaténer des cordes ensemble pour la requête, vous devez donc utiliser des déclarations préparées ( https://websitebeaver.com/prepared-statifs-in-php-mysqli-à-prevent-sql-injection )


0 commentaires