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 :

Fonction in_array() inopérante


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 46
    Par défaut Fonction in_array() inopérante
    Bonjour à tous,

    J'ai un petit soucis avec la fonction in_array :

    J'ai une appli WEB authentifiant l'utilisateur via son nom de session utilisé pour l'authentification NTLM.

    J'utilise ce script trouvé sur le net pour récupérer celui-ci :
    Code : 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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    <?php
     
    session_start();
     
    $headers = apache_request_headers();
     
    if (!isset($headers['Authorization'])){
    	header('HTTP/1.1 401 Unauthorized');
    	header('WWW-Authenticate: NTLM');
    	exit;
    }
     
    $auth = $headers['Authorization'];
     
    if (substr($auth,0,5) == 'NTLM ') {
    	$msg = base64_decode(substr($auth, 5));
    	if (substr($msg, 0, 8 ) != "NTLMSSP\x00") {
    		die('error header not recognised');
    	}
    	if ($msg[8] == "\x01") {
    		$msg2 = "NTLMSSP\x00\x02"."\x00\x00\x00\x00". // target name len/alloc
    		"\x00\x00\x00\x00". // target name offset
    		"\x01\x02\x81\x01". // flags
    		"\x00\x00\x00\x00\x00\x00\x00\x00". // challenge
    		"\x00\x00\x00\x00\x00\x00\x00\x00". // context
    		"\x00\x00\x00\x00\x30\x00\x00\x00"; // target info len/alloc/offset
    		header('HTTP/1.1 401 Unauthorized');
    		header('WWW-Authenticate: NTLM '.trim(base64_encode($msg2)));
    		exit;
    	} else if ($msg[8] == "\x03") {
    		function get_msg_str($msg, $start, $unicode = true) {
    			$len = (ord($msg[$start+1]) * 256) + ord($msg[$start]);
    			$off = (ord($msg[$start+5]) * 256) + ord($msg[$start+4]);
    			if ($unicode)
    				return str_replace("",  », substr($msg, $off, $len));
    			else
    				return substr($msg, $off, $len);
    			}
    		$_SESSION['username'] = get_msg_str($msg, 36);
    		$_SESSION['workstation'] = get_msg_str($msg, 44);
    	}
    }
    ?>
    J'ai ensuite sur la page d'authentification un simple in_array() qui vérifie si la variable $_SESSION['username'] est présente dans un tableau prédéfini :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
    session_start();
     
    $personnes_autorisees = array(
    "JDUPONT",
    "NGONTRAND"
    );
     
    if (in_array($_SESSION['username'], $personnes_autorisees)) {
     
    [...]
     
    }?>
    Le souci c'est que ça ne fonctionne pas, le in_array() n'a pas l'air de fonctionner...
    Est-ce un problème de comparaison de différents types de variables ?

    Merci de votre aide !

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    fait un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var_dump($_SESSION['username'], $personnes_autorisees);

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 46
    Par défaut
    Salut stealth35,

    j'ai exécuté la fonction var_dump() et voici le résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string(14) "JDUPONT" array(1) { [0]=> string(7) "JDUPONT" }
    À quoi correspond le chiffre entre parenthèses ?

    Merci de ton aide !

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    c'est le nombre de caractères, visiblement y'a en des cachés, essaye de faire un trim

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 46
    Par défaut
    Oui j'ai regardé mais apparemment ça n'enlève pas tous les caractères cachés (on passe de 14 à 13 !):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var_dump(trim($_SESSION['username']), $personnes_autorisees);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string(13) "JDUPONT" array(1) { [0]=> string(7) "JDUPONT" }

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    bizarre, tu peux faire un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var_dump(array_map('ord', str_split($_SESSION['username'])));

Discussions similaires

  1. [Tableaux] Fonction in_array pas claire
    Par Hightuxdotnet dans le forum Langage
    Réponses: 9
    Dernier message: 13/01/2009, 14h42
  2. [Tableaux] Pb avec fonction in_array
    Par yveslens dans le forum Langage
    Réponses: 4
    Dernier message: 27/03/2007, 13h34
  3. Réponses: 7
    Dernier message: 18/09/2006, 11h38
  4. [Système] utilisation de la fonction in_array
    Par WalidNat dans le forum Langage
    Réponses: 1
    Dernier message: 22/05/2006, 18h23
  5. [Tableaux] fonction in_array inopérante
    Par nicoaix dans le forum Langage
    Réponses: 7
    Dernier message: 21/04/2006, 18h37

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