[RESOLU] $_SESSION limité

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 : [RESOLU] $_SESSION limité

Re: $_SESSION limité

par Xotaz » 08 nov. 2020, 20:26

Je pense ajouter l'abonnement aux $_SESSION mais je m'en sort pas du tout..



dologin.php

Code : Tout sélectionner

<?php if(!empty($_POST['login'])){ session_start(); $login = $_POST['login']; $pwd = $_POST['pwd']; $query = "SELECT * FROM users WHERE login='$login' AND pwd='$pwd';"; $db = mysqli_connect('localhost','root','','parametre') or die("Connexion impossible " . mysqli_error()); $curseur = mysqli_query($db, $query) or die("exec impossible " . mysqli_error()); if(mysqli_num_rows($curseur) == 1){ $data = mysqli_fetch_object($curseur); if( $data->active == 1 ){ $_SESSION['auth'] = $login; $_SESSION['active'] = $data->active; $_SESSION['role'] = $data->role; $_SESSION['abo'] = $data->abo; switch($data->role){ case 'admin': header("location:" . "admin/index_admin.php"); exit; break; case 'user': header("location:" . "index.php"); exit; break; } } else{ $msg = "Compte expirée"; header("location:" . "login.php?msg=$msg"); exit; } } else{ $msg = "Login ou Mot de passe Incorrect"; header("location:" . "login.php?msg=$msg"); exit; } } ?>

Je penser mettre deux conditions comme ceci:

Code : Tout sélectionner

if( $data->active == 1 && $data->abo >= date("Y-m-d") ){
Mais je vois pas comment rediriger vers la page d'abonnement en cas de date antérieur ou sinon laisser la connexion se faire.

Re: $_SESSION limité

par Xotaz » 08 nov. 2020, 14:58

$sql="SELECT abo FROM users";
$result = mysqli_query($con,$sql);
while($row = mysqli_fetch_array($result)) {
$date1 = date("Y-m-d");
$date2 = $row["abo"];
}

cela tient compte, pour tous les utilisateurs, des dates du dernier utilisateur créé, et absolument pas de celles de l'utilisateur logué, donc le résultat ne peut pas être correct.
si les dates étaient dans la session, il n'y aurait pas à refaire une requête sql à chaque page.
Du coup, je rajoute $_SESSION['abo'] = $data->abo; dans la page Dologin.php ? et pour faire la comparaison des dates ? Je l'inclus dans le if active ?

Re: $_SESSION limité

par or 1 » 08 nov. 2020, 14:28

$sql="SELECT abo FROM users";
$result = mysqli_query($con,$sql);
while($row = mysqli_fetch_array($result)) {
$date1 = date("Y-m-d");
$date2 = $row["abo"];
}

cela tient compte, pour tous les utilisateurs, des dates du dernier utilisateur créé, et absolument pas de celles de l'utilisateur logué, donc le résultat ne peut pas être correct.
si les dates étaient dans la session, il n'y aurait pas à refaire une requête sql à chaque page.

$_SESSION limité

par Xotaz » 08 nov. 2020, 13:18

Bonjour,

Depuis ce matin je comprend pas du tout, tout fonctionner bien mais maintenant le site prend en compte toutes les données de la colonne date sauf celui d'Admin (qui à une date supérieur à la date d'aujourd'hui). Les autres ID sont en date antérieur.


Dologin.php

Code : Tout sélectionner

<?php if(!empty($_POST['login'])){ session_start(); $login = $_POST['login']; $pwd = $_POST['pwd']; $query = "SELECT * FROM users WHERE login='$login' AND pwd='$pwd';"; $db = mysqli_connect('localhost','root','','parametre') or die("Connexion impossible " . mysqli_error()); $curseur = mysqli_query($db, $query) or die("exec impossible " . mysqli_error()); if(mysqli_num_rows($curseur) == 1){ $data = mysqli_fetch_object($curseur); if($data->active == 1){ $_SESSION['auth'] = $login; $_SESSION['active'] = $data->active; $_SESSION['role'] = $data->role; switch($data->role){ case 'admin': header("location:" . "admin/index_admin.php"); exit; break; case 'user': header("location:" . "index.php"); exit; break; } } else{ $msg = "Compte expirée"; header("location:" . "login.php?msg=$msg"); exit; } } else{ $msg = "Login ou Mot de passe Incorrect"; header("location:" . "login.php?msg=$msg"); exit; } } ?>


ALL_pages.php

Code : Tout sélectionner

<?php session_start(); if(!isset($_SESSION["auth"])){ header("Location: login.php"); exit(); } require('connect.php'); mysqli_select_db($con,"parametre"); $sql="SELECT abo FROM users"; $result = mysqli_query($con,$sql); while($row = mysqli_fetch_array($result)) { $date1 = date("Y-m-d"); $date2 = $row["abo"]; } if ($date2 <= $date1){ header("location:" . "abonnement.php"); } ?>


Je pense qui faudrait mettre un WHERE ou alors inclure la if() dans le dologin.php ?
Je suis perdu actuellement, merci à vous de bien vouloir m'aider.