Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1442 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  prob avec les SESSIONs

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

prob avec les SESSIONs

n°2125054
silb
Posté le 06-02-2012 à 16:20:11  profilanswer
 

Bonjour,
 
Voilà mon problème
J'ai un site web accessible seulement après identification log/pwd stockés sur une BDD)
jusque là tout fonctionne correctement :love:  
Ce qui bloque c'est qu'un fois l'authentification effectuée il est possible d'y accéder via les autre pages
Je m'explique : si un utilisateur enregistre en favoris une page quelconque de l'arborescence il peut ensuite s'y connecter à volonter sans passer par l'authentification
 
j'ai bien compris l'utilisation des Sessions sur tous les forums et tutos, mais je n'arrive pas à le mettre en place sur mon site.
 
Voici en gros l'architecture:  
++++++++++++++++++++++++++++++++
index.php
- saisie des log/pwd
 
<form method="post" action="index1.php">  
Login :<input type="text" name="EDITlog">
Mot de passe :<input type="password" name="EDITpwd">
<input type="submit" value="Valider">
 
+++++++++++++++++++++++++++++++
index1.php
 
<?php
include("misenpage.php" );
?>
 
puis l'autorisation d'accès:
    <?
    mysql_connect("xxxx", "xxxx", "xxxx" );
    mysql_select_db("xxxx" );
    $Resultat=mysql_query("SELECT * FROM `ACCES` WHERE `log` LIKE '$EDITlog' AND `pwd` LIKE '$EDITpwd'" );
    if (mysql_numrows($Resultat) ==1)
      {
    ?>
 
puis le corps du site ...
 
++++++++++++++++++++++++++++++++
misenpage.php (totalité de la page) :
 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>
<head>
<title>TITRE</title>
<link rel="stylesheet" type="text/css" href="CSS.CSS">  
<style type="text/css">
</style>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta http-equiv="refresh" content="14400">
</head>
 
<body align=center>
<div id="fond">
<div id="corps">
<img src="image1.gif"/><img src="image2.gif"/>
 
++++++++++++++++++++++++++++++++
 
Et le reste du site du coup accessible directement
page1/page2/etc
avec à chaque fois l'include
 
je ne sais pas sur quelle page créer mes variables et où insérer session_start();
Bien évidament j'ai fais pas mal de tests mais tous non ok jusqu'à présent
si vous pouviez me mettre sur la voie svp  :jap:  
merci d'avance

mood
Publicité
Posté le 06-02-2012 à 16:20:11  profilanswer
 

n°2125165
carabde
vive le partage
Posté le 07-02-2012 à 11:52:07  profilanswer
 

Bonjour tout d'abord vous devez insérer session_start(); dans toute vos page avant tout code.
En suite vous enregistrez une session avec les données d’authentification.
et en fin vous devez faire une vérification d'authentification sur chaque page avant son affichage, c à d si la session d'authentification la page sera affichée si non vous renvoyer le visiteur sur la page index pour s'authentifier.
Pour plus de précision voir ce cours sur les sessions http://apprendre-creer-sites.com/php/php-sessions.php


---------------
carabde
n°2125322
silb
Posté le 08-02-2012 à 10:46:39  profilanswer
 

Est-ce que l'authentification par mdp/pwd sur BDD est compatible avec les sessions ?
j'ai bien inséré <?php session_start();/?> sur toutes mes pages, mais je ne trouve pas la manière d'imbriquer l'ouverture de session dans mon script  
est-ce que je peux utiliser la même variable que celle de l'authentification ($EDITlog) vu qu'elle est déjà créé à partir de l'index1.php ?

n°2125343
carabde
vive le partage
Posté le 08-02-2012 à 11:20:53  profilanswer
 

Tout d’abord il faut créer une session quand le visiteur se connecte avec son nom d’utilisateur et son mot de passe comme suit
$_SESSION['user']= ‘nom utilisateur’;
$_SESSION['pass']= ‘mot de passe’;
 
en suite sur les autre pages je vérifie si les sessions user et pass existent si non je renvoie le visiteur sur la page index pour s’authentifier.
Voici le comment :
if(isset($_SESSION['user'] and $_SESSION['pass']){
//ici je compare avec ma base de données
if ($_SESSION['user']==’user de la bdd’ AND $_SESSION['pass']==’pass de la bdd){
 
je fait ce que je veux par exemple afficher les éléments de la page
}
}else je renvoie le visiteur sur la page index s'il n'est pas authentifié


Message édité par carabde le 08-02-2012 à 11:22:06
n°2129059
silb
Posté le 01-03-2012 à 11:09:47  profilanswer
 

bon bon bon
déjà merci pour vos infos, j'ai déjà pas mal avancé
j'ai dégagé les includes pour mes tests et ça marche ..... pfouuu
 
 
<?php
session_start();
$_SESSION['log'] = $EDITlog['log'];
?>
 
<?php
echo $_SESSION['log'];  
?>
 
 
  <?  
    mysql_connect("xxxx", "xxxx", "xxxx" );  
    mysql_select_db("xxxx" );  
    $Resultat=mysql_query("SELECT * FROM `ACCES` WHERE `log` LIKE '$EDITlog' AND `pwd` LIKE '$EDITpwd'" );  
    if (mysql_numrows($Resultat) ==1)  
      {  
    ?>  
 
 
ça serait trop beau que tout marche correctement  :(  
voici mon nouveau prob :
 
<?php
echo $_SESSION['log'];     <- n'affiche QUE le 1er caractère du log  :heink:  
?>

n°2129091
rufo
Pas me confondre avec Lycos!
Posté le 01-03-2012 à 13:05:18  profilanswer
 

$_SESSION['log'] = $EDITlog['log'];  :??:
Ca serait pas plutôt $_SESSION['log'] = $EDITlog; ?
 
PS1 : utiliser plutôt le signe = dans les requêtes SQL que LIKE. Déjà parce que = utilise les index et pas LIKE. Ensuite parce qu'un petit malin qui mettra des % dans les champs qui alimentent $EDITlog et $EDITpwd va permettre de se logger.
 
PS2 : as-tu traité le cas des SQL injections? J'ai peur que non à la vue de ton code :/
 
PS3 : pitié, t'as pas stocké en claire dans la BD les mots de passe?


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2129346
silb
Posté le 02-03-2012 à 12:23:08  profilanswer
 

Merci Rufo -> $_SESSION['log'] = $EDITlog; -> impec
ainsi que = au lieu de LIKE
 
bon sinon tu m'as démasqué  :(  mes mdp sont bien en clair pour le moment, leur cryptage est ma prochaine étape, une fois que j'en aurais fini avec mes SESSIONs
et Concernant les injections SQL ...... ça sera la suivante
pour l'instant je n'ai pas d'info sensible dans ma BDD,  je construit seulement la structure
 
j'avance pas à pas  ;)  
et surtout merci pour vous infos

n°2129383
rufo
Pas me confondre avec Lycos!
Posté le 02-03-2012 à 14:35:53  profilanswer
 

Pas besoin de cryptage, juste du hashage en md5 sou sha-1 :
http://ru.php.net/manual/en/function.md5.php
http://ru.php.net/manual/en/function.sha1.php
 
Au lieu de faire un " where mdp ='$MonMdp' " ben tu fais " where mdp = '".md5($MonMdp)."' "
 
Comme ça, c'est pas réversible. ;) Après, il existe bien des rainbow tables qui permettent de casser des mdp "faibles" hashés en md5, masi c'est quand même beaucoup mieux qu'en clair :o
 
Edit : tu trouveras une implémentation de ce système (md5) dans mon appli Astres (cf ma signature). J'ai même hashé le mdp et le login cîté client, via une lib Javascript, comme ça, le login/mdp ne circule pas en clair entre le client et le serveur. Ca vaut pas du https, mais c'est déjà ça :)


Message édité par rufo le 02-03-2012 à 14:37:22

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2130025
silb
Posté le 07-03-2012 à 12:29:39  profilanswer
 

Bon ça y est, SESSIONs bouclées, et pas sans mal  
j'ai attaqué le md5, mais je n'arrive pas à trouver la syntaxe exacte pour l'insertion du mdp crypté dans ma BDD
c'est certainement une histoire de point, de guillements ou qq chose dans le genre
 
mysql_query("INSERT INTO `ACCES` (`log`, `pwd`, `mail`) VALUES ('$EDITlog', '$EDITpwd = md5($EDITpwd)', '$EDITmail');" );  
 
mon champ pwd dans ma BDD est en "TEXTE", dois-je la passer en VARCHAR ?
 
Rufo -> je regarderais ce soir ton appli Astres, trop lourd pour le telech à mon taf ;)

n°2130035
rufo
Pas me confondre avec Lycos!
Posté le 07-03-2012 à 13:56:14  profilanswer
 

mysql_query("INSERT INTO `ACCES` (`log`, `pwd`, `mail`) VALUES ('$EDITlog', '".md5($EDITpwd)."', '$EDITmail');" );


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
mood
Publicité
Posté le 07-03-2012 à 13:56:14  profilanswer
 

n°2130904
silb
Posté le 12-03-2012 à 14:53:09  profilanswer
 

YES YES YES ça fonctionne  :D  
je suis maintenant sur les injections SQL
j'ai testé quelques scripts et pour finir j'ai celui-ci :
 
<?php
session_start();
$_SESSION['id'] = $EDITlogin;
?>    
 
 <?  
    mysql_connect("xxxx", "xxxx", "xxxx" );  
    mysql_select_db("xxxx" );  
    $EDITlogin = mysql_real_escape_string($EDITlog);
    $Resultat=mysql_query("SELECT * FROM `ACCES` WHERE `log` = '$EDITlogin' AND `pwd` = '".md5($EDITpwd)."'" );
    if (mysql_numrows($Resultat) ==1)
      {
 
je pense que ça fonctionne,  :heink:  
par contre ce qui me fait penser que qq chose cloche c'est que :
 
<?php
echo $_SESSION['id']; -> ne m'affiche rien  
?>
 
<?php
echo $EDITlogin; -> affiche bien le log  
?>
 
 

n°2130918
silb
Posté le 12-03-2012 à 15:14:30  profilanswer
 

Si je repasse ma session en :
 
<?php
session_start();
$_SESSION['id'] = $EDITlog;
?>
 
<?php
echo $_SESSION['id'];  
?>
affichage ok / navigation ok  :heink:

n°2130931
rufo
Pas me confondre avec Lycos!
Posté le 12-03-2012 à 15:39:26  profilanswer
 

La session, faudrait plutôt la créer si l'authentification fonctionne, donc récupérer les données depuis la requête SQL qui fait le SELECT.
$_SESSION['id'] = champ ID qui vient de la BD
 
Ensuite, dans tes pages, vers le début, tu feras un truc du genre
if ((isset($_SESSION['id'])) && (!empty($_SESSION['id'])))
{
    // faire traitement quand t'es connecté
}
else
{
    // traitement quand t'es pas connecté
}


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  prob avec les SESSIONs

 

Sujets relatifs
Cookies et sessionsprob avec chaine de caractere
prob avec scanfFormulaire de login OK en local mais pas sur le net ? (pb de sessions)
prob d'authentificationSessions PHP
Sessions,HELP!Les sessions et l'ajax
Prob PHP / MySQL[PHP] Ptit prob de config pour les sessions
Plus de sujets relatifs à : prob avec les SESSIONs


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR