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.
-
On vient de m'expliquer ce que fesais exactement le code que je présentait jusqu'a maintenant , et cela ne fait pas du tout ce que je veux ....
-
Non, aucune chance.
De toutes façons, cette page ,'existe plus une fois que tu cliques sur le lien... -
J'utilise Easy-php , pour ouvrir la page test je l'ai mise dans un répertoire , et je clic sur le lien d'easy-php pour ouvrir la page test, peut etre que la session s'ouvre sur la page d'easy php administration?
-
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.
-
-
Commence par mettre en commentaire tout les lignes echo, puis enlèves le deuxième ?> en bas.
-
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!";
}
}
}
}
?>
?> -
C'ets fou...
Dsl mais, stp, mets moi le code en entier. -
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. -
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 ? -
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 -
Et si tu la lances directement ?
-
J'accede a cette page a partir d'une autre , mais c'est tout.
-
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 ? -
-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 -
Bon... les 30èmes finalement...
-
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(); -
Marque nous les 19 premières lignes stp...
-
J'accede à la page avec un lien :<div align="center" ><a href="./test.php" >ici</a></div>
-
alors apparemment il y a un souci avec les sessions.
Appel tu ta page par un include ? -
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
- 1
- 2