IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Pouvoir demander plusieurs fois l'authentification


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 497
    Billets dans le blog
    1
    Par défaut Pouvoir demander plusieurs fois l'authentification
    Bonjour,

    je n'ai pas posé de question tout de suite, mais depuis ce matin, je n'y arrive pas...

    Mon but est de permettre de demander plusieurs fois une authentification, afin de faire plusieurs tests sans devoir redémarrer le PC entre 2 essais. J'utilise pour cela une variable de session. Le problème, c'est que soit il ne demandait jamais l'authentification, soit il la demande mais ne la valide pas. Le cas du code actuel que voici est le premier cas :

    indexpageavecauth.php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    <?php
    error_reporting(E_ALL ^ (E_NOTICE|E_WARNING|E_DEPRECATED));
    header('Content-type: text/html; charset=UTF-8');
    session_start();
     
    include (dirname(__DIR__).'\pdo\config\config.php');
     
    include dirname(__DIR__)."\pdo\authenticateauth.php";
    if ((isset($_SESSION["annul"]))&&($_SESSION["annul"]==0)) $auth=authentification();
     
    	// DEMANDE D'AUTHENTIFICATION
    	if ( ! $_SESSION["auth"])
    	{
    	  $_SESSION["annul"]==0;
    	  header( 'WWW-Authenticate: Basic realm="EIS SUPPORT WEBSITE"' );
    	  header("HTTP/1.1 401 Unauthorized");
    	  echo "Accès Restreint...<br/>";
    	  echo "<a href=\"".SITE_URL_HTTP."\indexpageavecauth.php\">Authentification</a>";
    	}
    	else
    	{
              ...
            }
    ?>
    <br/><a href="<?php echo SITE_URL_HTTP;?>\annul_auth.php">Annul_auth</a>

    authenticateauth.php
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    <?php
    session_start();
     
    function authentification()
    {
    	$auth=0;
    	$entered_user = $_SERVER["PHP_AUTH_USER"];
    	$entered_pass = $_SERVER["PHP_AUTH_PW"];
     
    	if (isset($entered_user) && isset($entered_pass)) {
     
    		$auth=false;
    	        // contrôle authentif et positionnement de $auth
    		}
    	}
     
    	$_SESSION["auth"]=$auth;
     
    	return $auth;
    }
     
     
    ?>

    annul_auth.php
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <?php
    session_start();
    include (dirname(__DIR__).'\pdo\config\config.php');
    $_SESSION["auth"]=0;
    $_SESSION["annul"]=1;
    $file=SITE_URL_HTTP."/indexpageavecauth.php? ";
    header('Location:'.$file);
    exit;
    ?>

    config.php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <?php
    // -----------------------------------------------------------
    // CONFIGURATION : 
    // -----------------------------------------------------------
    if(!defined('SITE_URL_WWW'))	define('SITE_URL_WWW',	'10.234.40.34/devjupiter/pdo');  // en TEST LOCAL, A REMPLACER PAR...
    //if(!defined('SITE_URL_WWW'))	define('SITE_URL_WWW',	'www.mon-site-en-ligne.com'); // en PRODUCTION
    if( !defined('SITE_URL_HTTP'))	define('SITE_URL_HTTP',	'http://'.SITE_URL_WWW);
     
    ?>
    Que faut-il changer ?

  2. #2
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 497
    Billets dans le blog
    1
    Par défaut
    Après un brin de recherche, je suis tombé sur une solution complètement différente (et plus simple) mais contrairement à ce que je pensais, la déconnexion n'est pas faite :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    <div id="haut">
    <?php
     
    if (!isset($_SERVER['PHP_AUTH_USER'])) {
       header('WWW-Authenticate: Basic realm="My Realm"');
       header('HTTP/1.0 401 Unauthorized');
       echo 'Texte utilisé si le visiteur utilise le bouton d\'annulation';
       exit;
    } else {
        if (isset($_REQUEST['logout'])) {
            header('HTTP/1.0 401 Unauthorized');
            echo 'Vous êtes déconnecté !';
    ?><br/><a href="<?php echo $_SERVER['PHP_SELF'];?>#haut">recommencer</a><?php
            exit;
        }
        echo "<p>Bonjour, {$_SERVER['PHP_AUTH_USER']}.</p>";
        echo "<p>Votre mot de passe est {$_SERVER['PHP_AUTH_PW']}.</p>";
        echo '<a href="'.$_SERVER['PHP_SELF'].'">continuer</a> | <a href="'.$_SERVER['PHP_SELF'].'?logout">deconnexion</a>';
    }
     
    ?>
    </div>

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 209
    Par défaut
    Bonjour,
    as tu tenté la déconnexion avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    unset($_SESSION['MACHIN_CHOSE']);
    //...
    //...
    unset($_SERVER['PHP_AUTH_USER']);
    unset($_SERVER['PHP_AUTH_PW']);
    unset($_SERVER['PHP_AUTH_DIGEST']);
    session_destroy();
    PS: Éviter d'envoyer des header() avant session_start()

  4. #4
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 497
    Billets dans le blog
    1
    Par défaut
    Bien que pas sûr que les headers aient quelque chose à voir avec les sessions, comme ça mange pas de pain, j'ai rajouté la création des sessions. Comme mon identification est de type basic et non digest, la variable $_SERVER['PHP_AUTH_DIGEST'] n'existe pas. J'ai néanmoins tenté d'utiliser ton code, mais ça ne se déconnecte pas

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    <div id="haut">
    <?php
    session_start();
    var_dump($_SERVER['PHP_AUTH_USER']);
    var_dump($_SERVER['PHP_AUTH_PW']);
    if (!isset($_SERVER['PHP_AUTH_USER'])) {
       header('WWW-Authenticate: Basic realm="My Realm"');
       header('HTTP/1.0 401 Unauthorized');
       echo 'Texte utilisé si le visiteur utilise le bouton d\'annulation';
       exit;
    } else {
        if (isset($_REQUEST['logout'])) {
            header('HTTP/1.0 401 Unauthorized');
            echo 'Vous êtes déconnecté !';
    	unset($_SERVER['PHP_AUTH_USER']);
    	unset($_SERVER['PHP_AUTH_PW']);
    	session_destroy();
    ?><br/><a href="<?php echo $_SERVER['PHP_SELF'];?>#haut">recommencer</a><?php
            exit;
        }
        echo "<p>Bonjour, {$_SERVER['PHP_AUTH_USER']}.</p>";
        echo "<p>Votre mot de passe est {$_SERVER['PHP_AUTH_PW']}.</p>";
        echo '<a href="'.$_SERVER['PHP_SELF'].'">continuer</a> | <a href="'.$_SERVER['PHP_SELF'].'?logout">deconnexion</a>';
    }
     
    ?>
    </div>

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour Laurent,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     <div id="haut">
    <?php
    session_start();
    Ces 3 lignes ne te posent pas de problème existenciel ?

    Que tu ne sois sûr de rien, je veux bien.
    Mais que tu refasses les même erreurs encore et encore....

  6. #6
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 497
    Billets dans le blog
    1
    Par défaut
    OK, j'ai corrigé mon erreur mais toujours pas de déconnexion :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    <?php
    header('Content-type: text/html; charset=UTF-8');
    error_reporting(E_ALL);
    ini_set('display_errors','1'); 
    session_start();
    ?> 
    <div id="haut">
    <?php
    var_dump($_SERVER['PHP_AUTH_USER']);
    var_dump($_SERVER['PHP_AUTH_PW']);
    if (!isset($_SERVER['PHP_AUTH_USER'])) {
       header('WWW-Authenticate: Basic realm="My Realm"');
       header('HTTP/1.0 401 Unauthorized');
       echo 'Texte utilisé si le visiteur utilise le bouton d\'annulation';
       exit;
    } else {
        if (isset($_REQUEST['logout'])) {
            header('HTTP/1.0 401 Unauthorized');
            echo 'Vous êtes déconnecté !';
    	unset($_SERVER['PHP_AUTH_USER']);
    	unset($_SERVER['PHP_AUTH_PW']);
    	session_destroy();
    ?><br/><a href="<?php echo $_SERVER['PHP_SELF'];?>#haut">recommencer</a><?php
            exit;
        }
        echo "<p>Bonjour, {$_SERVER['PHP_AUTH_USER']}.</p>";
        echo "<p>Votre mot de passe est {$_SERVER['PHP_AUTH_PW']}.</p>";
        echo '<a href="'.$_SERVER['PHP_SELF'].'">continuer</a> | <a href="'.$_SERVER['PHP_SELF'].'?logout">deconnexion</a>';
    }
     
    ?>
    </div>

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Valeurs de paramètre demandées plusieurs fois
    Par matth32 dans le forum Access
    Réponses: 3
    Dernier message: 15/03/2013, 21h02
  2. Réponses: 170
    Dernier message: 19/08/2009, 16h13
  3. demander plusieurs fois mot de passe avec htaccess
    Par magy91 dans le forum Sécurité
    Réponses: 1
    Dernier message: 29/02/2008, 17h44
  4. Pouvoir afficher plusieurs fois le même carctère
    Par kerido dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 25/10/2007, 15h44
  5. Sans pouvoir cliquez plusieurs fois
    Par X-plode dans le forum Interfaces Graphiques en Java
    Réponses: 4
    Dernier message: 15/06/2007, 16h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo