Fonction PHP
J'aimerais connaitre la fonction PHP qui permet de récupérer la valeur du nom de l'utilisateur windows qui se connecte à mon site intranet?!
Configuration: Windows 2000 Firefox 2.0.0.11
23 réponses
Récupérer le nom de l'utilisateur Windows qui se connecte à un site intranet via PHP était la demande centrale, avec des échanges analysant les limitations et les possibilités techniques. Plusieurs répondants suggèrent que l'identification Windows via NTLM et un proxy peut influencer la récupération de ces informations, nécessitant des entêtes comme Authorization et une gestion des identifiants. D'autres indiquent que ce n'est pas directement faisable en PHP sans authentification côté serveur, et proposent des approches alternatives telles que des vérifications de proxy ou des notifications d'erreur. En pratique, des échanges montrent aussi des soucis de sessions et d'en-têtes déjà envoyés, ce qui provoque des avertissements et complexifie l'obtention d'un nom d'utilisateur fiable.
-
Elle n'existe pas...
Ce n'est pas possible directement. -
Dans ce cas , comment faire pour récupérer le nom de l'utilisateur windows!?
-
Bonjour,
Laisse-moi te dire que ce n'est pas simple...
Il y a une explication avec le code source suivant :
https://codes-sources.commentcamarche.net/
Mais même pour le développeur que je suis, c'est pas tout à fait clair alors...
Reltak. -
J'avais déja essayer ce code j'obtient ceci:
Notice: A session had already been started - ignoring session_start() in c:\www_intranet_new\test.php on line 19
Notice: Undefined index: Authorization in c:\www_intranet_new\test.php on line 26
Warning: Cannot modify header information - headers already sent by (output started at c:\www_intranet_new\test.php:19) in c:\www_intranet_new\test.php on line 27
Warning: Cannot modify header information - headers already sent by (output started at c:\www_intranet_new\test.php:19) in c:\www_intranet_new\test.php on line 28 -
alors apparemment il y a un souci avec les sessions.
Appel tu ta page par un include ? -
J'accede à la page avec un lien :<div align="center" ><a href="./test.php" >ici</a></div>
-
Marque nous les 19 premières lignes stp...
-
Les 19 lignes sont du commentaire et l'ouverture session :
<?php
/***********************************************************************
************************************************************************
*
* PHP NTLM GET LOGIN
* Version 0.2.1
* http://www.secusquad.com/ntlm/
* Copyright (c) 2004 Nicolas GOLLET ( Nicolas (dot) gollet (at) secusquad (dot) com )
* Copyright (c) 2004 Flextronics Saint-Etienne
*
* This program is free software. You can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License.
*
***********************************************************************/
session_start(); -
Bon... les 30èmes finalement...
-
-18
session_start();
$headers = apache_request_headers(); // Récupération des l'entêtes client
if (@$_SERVER['HTTP_VIA'] != NULL){ // nous verifions si un proxy est utilisé : parceque l'identification par ntlm ne peut pas passer par un proxy
echo "Proxy bypass!";
}
elseif($headers['Authorization'] == NULL){ //si l'entete autorisation est inexistante
header( "HTTP/1.0 401 Unauthorized" ); //envoi au client le mode d'identification
header( "WWW-Authenticate: NTLM" ); //dans notre cas le NTLM
exit; //on quitte
}
-31 -
C'est bizarre...
Tu es sur que c'ets vraiment la début de ta page ? cette page ne vient pas en compléter une autre ou quoi que ce soit ? -
J'accede a cette page a partir d'une autre , mais c'est tout.
-
Et si tu la lances directement ?
-
Ca me lance le meme message qu'avant -_- :
Notice: A session had already been started - ignoring session_start() in c:\program files\easyphp1-8\www\test\index.php on line 23
Notice: Undefined index: Authorization in c:\program files\easyphp1-8\www\test\index.php on line 30
Warning: Cannot modify header information - headers already sent by (output started at c:\program files\easyphp1-8\www\test\index.php:5) in c:\program files\easyphp1-8\www\test\index.php on line 31
Warning: Cannot modify header information - headers already sent by (output started at c:\program files\easyphp1-8\www\test\index.php:5) in c:\program files\easyphp1-8\www\test\index.php on line 32 -
Essayes de virer tes commentaires au départ, juste pour voire...
Et ta page commence tout de suite par le <?php, on est d'accord ? -
J'ai enlever les com. du début et fait en sorte qu'il n'y ait que du php cela me donne:
Notice: A session had already been started - ignoring session_start() in c:\program files\easyphp1-8\www\test\index.php on line 4
Notice: Undefined index: Authorization in c:\program files\easyphp1-8\www\test\index.php on line 11
Warning: Cannot modify header information - headers already sent by (output started at c:\program files\easyphp1-8\www\test\index.php:2) in c:\program files\easyphp1-8\www\test\index.php on line 12
Warning: Cannot modify header information - headers already sent by (output started at c:\program files\easyphp1-8\www\test\index.php:2) in c:\program files\easyphp1-8\www\test\index.php on line 13
En fait rien a bouger excepté le n° de ligne. -
C'ets fou...
Dsl mais, stp, mets moi le code en entier. -
C'est exactement le code de ce lien :
https://codes-sources.commentcamarche.net/
le code :
<?php
session_start();
$headers = apache_request_headers(); // Récupération des l'entêtes client
if (@$_SERVER['HTTP_VIA'] != NULL){ // nous verifions si un proxy est utilisé : parceque l'identification par ntlm ne peut pas passer par un proxy
echo "Proxy bypass!";
}
elseif($headers['Authorization'] == NULL){ //si l'entete autorisation est inexistante
header( "HTTP/1.0 401 Unauthorized" ); //envoi au client le mode d'identification
header( "WWW-Authenticate: NTLM" ); //dans notre cas le NTLM
exit; //on quitte
}
if(isset($headers['Authorization'])) //dans le cas d'une authorisation (identification)
{
if(substr($headers['Authorization'],0,5) == 'NTLM '){ // on vérifit que le client soit en NTLM
$chaine=$headers['Authorization'];
$chaine=substr($chaine, 5); // recuperation du base64-encoded type1 message
$chained64=base64_decode($chaine); // decodage base64 dans $chained64
if(ord($chained64{8}) == 1){
// |_ byte signifiant l'etape du processus d'identification (etape 3)
// verification du drapeau NTLM "0xb2" à l'offset 13 dans le message type-1-message (comp ie 5.5+) :
if (ord($chained64[13]) != 178){
echo "NTLM Flag error!";
exit;
}
$retAuth = "NTLMSSP".chr(000).chr(002).chr(000).chr(000).chr(000).chr(000).chr(000).chr(000);
$retAuth .= chr(000).chr(040).chr(000).chr(000).chr(000).chr(001).chr(130).chr(000).chr(000);
$retAuth .= chr(000).chr(002).chr(002).chr(002).chr(000).chr(000).chr(000).chr(000).chr(000);
$retAuth .= chr(000).chr(000).chr(000).chr(000).chr(000).chr(000).chr(000);
$retAuth64 =base64_encode($retAuth); // encode en base64
$retAuth64 = trim($retAuth64); // enleve les espaces de debut et de fin
header( "HTTP/1.0 401 Unauthorized" ); // envoi le nouveau header
header( "WWW-Authenticate: NTLM $retAuth64" ); // avec l'identification supplémentaire
exit;
}
else if(ord($chained64{8}) == 3){
// |_ byte signifiant l'etape du processus d'identification (etape 5)
// on recupere le domaine
$lenght_domain = (ord($chained64[31])*256 + ord($chained64[30])); // longueur du domain
$offset_domain = (ord($chained64[33])*256 + ord($chained64[32])); // position du domain.
$domain = str_replace("\0","",substr($chained64, $offset_domain, $lenght_domain)); // decoupage du du domain
//le login
$lenght_login = (ord($chained64[39])*256 + ord($chained64[38])); // longueur du login.
$offset_login = (ord($chained64[41])*256 + ord($chained64[40])); // position du login.
$login = str_replace("\0","",substr($chained64, $offset_login, $lenght_login)); // decoupage du login
if ( $login != NULL){
// stockage des données dans des variable de session
$_SESSION['Login']=$login;
header("Location: newpage.php");
exit;
}
else{
echo "NT Login empty!";
}
}
}
}
?>
?> -
Commence par mettre en commentaire tout les lignes echo, puis enlèves le deuxième ?> en bas.
-
Cela ne change rien , toujour les même erreurs a l'écran.
-
Je ne sais vraiment pas quoi te dire...
L'erreur suivante :
Notice: A session had already been started - ignoring session_start() in c:\program files\easyphp1-8\www\test\index.php on line 4
Veut dire que les sessions sont déjà ouvertes... En gros, qu'un session_start existe déjà. Alors deux solution : soit la page est un include d'une autre qui a déjà un session_start, mais tu me dis que non, soit la page s'apelle elle même mais je ne vois rien de tel...
Je suis perdu.
-
- 1
- 2