Précédent   Forum des professionnels en informatique > PHP > Langage > Fonctions
Fonctions Forum d'entraide sur les fonctions PHP. Avant de poster -> FAQ fonctions et Sources diverses
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/10/2011, 10h47   #1
Invité de passage
 
Inscription : avril 2009
Messages : 42
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 42
Points : 3
Points : 3
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 :
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 :
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 !
trifly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2011, 11h35   #2
Modérateur
 
Inscription : septembre 2010
Messages : 7 180
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 180
Points : 8 557
Points : 8 557
fait un
Code :
var_dump($_SESSION['username'], $personnes_autorisees);
__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2011, 13h27   #3
Invité de passage
 
Inscription : avril 2009
Messages : 42
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 42
Points : 3
Points : 3
Salut stealth35,

j'ai exécuté la fonction var_dump() et voici le résultat :
Code :
string(14) "JDUPONT" array(1) { [0]=> string(7) "JDUPONT" }
À quoi correspond le chiffre entre parenthèses ?

Merci de ton aide !
trifly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2011, 13h32   #4
Modérateur
 
Inscription : septembre 2010
Messages : 7 180
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 180
Points : 8 557
Points : 8 557
c'est le nombre de caractères, visiblement y'a en des cachés, essaye de faire un trim
__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2011, 13h52   #5
Invité de passage
 
Inscription : avril 2009
Messages : 42
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 42
Points : 3
Points : 3
Oui j'ai regardé mais apparemment ça n'enlève pas tous les caractères cachés (on passe de 14 à 13 !):
Code :
var_dump(trim($_SESSION['username']), $personnes_autorisees);
Code :
string(13) "JDUPONT" array(1) { [0]=> string(7) "JDUPONT" }
trifly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2011, 14h00   #6
Modérateur
 
Inscription : septembre 2010
Messages : 7 180
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 180
Points : 8 557
Points : 8 557
bizarre, tu peux faire un

Code :
var_dump(array_map('ord', str_split($_SESSION['username'])));
__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2011, 14h02   #7
Invité de passage
 
Inscription : avril 2009
Messages : 42
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 42
Points : 3
Points : 3
Et voilà :
Code :
var_dump(array_map('ord', str_split($_SESSION['username'])));
Code :
1
2
3
array(14) { 
[0]=> int(74) [1]=> int(0) [2]=> int(68) [3]=> int(0) [4]=> int(85) [5]=> int(0) [6]=> int(80) [7]=> int(0) [8]=> int(79) [9]=> int(0) [10]=> int(78) [11]=> int(0) [12]=> int(84) [13]=> int(0) 
}
trifly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2011, 14h11   #8
Modérateur
 
Inscription : septembre 2010
Messages : 7 180
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 180
Points : 8 557
Points : 8 557
et fait juste

Code :
var_dump(str_split($_SESSION['username']));
__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2011, 14h16   #9
Invité de passage
 
Inscription : avril 2009
Messages : 42
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 42
Points : 3
Points : 3
Code :
var_dump(str_split($_SESSION['username']));
Code :
1
2
3
array(14) { 
[0]=> string(1) "J" [1]=> string(1) "" [2]=> string(1) "D" [3]=> string(1) "" [4]=> string(1) "U" [5]=> string(1) "" [6]=> string(1) "P" [7]=> string(1) "" [8]=> string(1) "O" [9]=> string(1) "" [10]=> string(1) "N" [11]=> string(1) "" [12]=> string(1) "T" [13]=> string(1) "" 
}
Si je comprends bien, il y a des espaces vides dans ma chaîne qui compteraient pour des caractères ?
trifly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2011, 14h17   #10
Modérateur
 
Inscription : septembre 2010
Messages : 7 180
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 180
Points : 8 557
Points : 8 557
tu remplis t'as session via du javascript ?

EDIT : le problème doit venir du get_msg_str, soit il rajoute des choses, sois la réponse est en utf-16
__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2011, 14h22   #11
Invité de passage
 
Inscription : avril 2009
Messages : 42
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 42
Points : 3
Points : 3
Je remplis ma session ?
Tu parles de la variable de sessions 'username' ?
Si c'est bien ça, non je la remplis en PHP (voir le bas du script d'authentification NTLM)

Edit : Ok et existe-il une fonction pour récupérer la chaîne en utf8 ? J'ai essayé utf8_encode() mais ça n'a pas fonctionné.

Merci encore de ton aide
trifly est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h02.


 
 
 
 
Partenaires

Hébergement Web