Fonction PHP

Bonjour,
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ésumé de la discussion

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.

Bobot (l’IA à votre service)
  1. Elle n'existe pas...

    Ce n'est pas possible directement.
    0
    1. Dans ce cas , comment faire pour récupérer le nom de l'utilisateur windows!?
      0
      1. 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
        0
        1. alors apparemment il y a un souci avec les sessions.

          Appel tu ta page par un include ?
          0
          1. J'accede à la page avec un lien :<div align="center" ><a href="./test.php" >ici</a></div>
            0
            1. Marque nous les 19 premières lignes stp...
              0
              1. 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();
                0
                1. Bon... les 30èmes finalement...
                  0
                  1. -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
                    0
                    1. 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 ?
                      0
                      1. J'accede a cette page a partir d'une autre , mais c'est tout.
                        0
                        1. 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
                          0
                          1. 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 ?
                            0
                            1. 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.
                              0
                              1. C'ets fou...

                                Dsl mais, stp, mets moi le code en entier.
                                0
                                1. 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!";
                                  }

                                  }
                                  }

                                  }

                                  ?>
                                  ?>
                                  0
                                  1. Commence par mettre en commentaire tout les lignes echo, puis enlèves le deuxième ?> en bas.
                                    0
                                    1. Cela ne change rien , toujour les même erreurs a l'écran.
                                      0
                                      1. 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.
                                        0
                                    • 1
                                    • 2