Au niveau de la directive register_globals ?Edit: En copiant-collant tous mes fichiers php sur un autre serveur, tout marche parfaitement... il y a donc bien un probleme de configuration au niveau de ce serveur, mais quoi ?
Au niveau de la directive register_globals ?Edit: En copiant-collant tous mes fichiers php sur un autre serveur, tout marche parfaitement... il y a donc bien un probleme de configuration au niveau de ce serveur, mais quoi ?
<?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)
$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;
}
}
}
}
?>
Il remplit bien sa fonction, à savoir : récupérer le login windows de la personne qui visite la page. Mais une fois exécuté, plus moyen de récupérer les valeurs de $_POST et $_FILES.Sauvegarde tes valeurs dans la session:Je viens de trouver la source du problème, mais j'aurais encore besoin d'aide pour le regler.
En effet, le portail que je développe est pour un intranet, j'include donc un script (trouvé sur internet) pour récupérer le login Windows de la personne qui arrive sur la page, pour qu'elle n'aie pas besoin de se logguer, et j'ai donc trouvé que c'était justement ce script qui vidait mes variables $_POST et $_FILES.
Le problème est que, je ne vois pas d'où vient le problème, peut-etre pourriez-vous m'aider?
Voilà le script :
Il remplit bien sa fonction, à savoir : récupérer le login windows de la personne qui visite la page. Mais une fois exécuté, plus moyen de récupérer les valeurs de $_POST et $_FILES.<?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) $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; } } } } ?>
// --- Le principe mais peu conseillé de cette manière !
//
$_SESSION[get] = serialize($_GET);
$_SESSION[post] = serialize($_POST);
$_SESSION[files] = serialize($_FILES);
$_SESSION[xxx] = ...;
Ce qui est conseillé, en revanche, s'est d'enregistrer dans une table les infos que tu veux sauvegarderNon non, c'est très clair, merciJe sais, je suis peu clair mais c'est le matin, un peu de compassion, stp lol
A la réception du formulaire, quand tu as toutes les infos.Edit: euuh.. par contre, c'est à quel moment que j'enregistre toutes mes variables dans la session? Au moment de l'envoi du formulaire? Ou bien dans le script qui récupère le login?
Code : Tout sélectionner
Ton problème ne proviendrait tout simplement pas dudit fichier de récupération du loggin Windows qui est appelé sur chaque page?
Code : Tout sélectionner
Si ta page de recupération du loggin est effectivement appelé a chaque chargement de page
session_start();
// Variable pour le script html
//
$cde = "";
$cde .= "<!DOCTYPE ...>\n";
$cde .= "<html>\n";
.
.
.
// Si ta page provient d'un formulaire
//
if (isset($_POST[form]))
{
// La page précédente était LE formulaire, on test les éléments
// Flag de réussite sur le test des éléments.
//
$bfForm = false / true
.
.
.
// Si tes éléments sont incorrects on détruit l'élément post en gardant les autres
//
if (!$bfForm)
{
unset($_POST[form]);
header("Location:./index.php");
}
// Tes éléments sont corrects, alors dernier test (c'est si tu acceptes un user inconnu)
//
if($_POST[login] == ...) $_SESSION[login] = $_POST[login];
else $_SESSION[login] = "Unknow";
// Ici, Le form est passé, les éléments sont corrects donc:
// A toi de sauvegarder les datas dans une session (en sérialisant), Dans une DB, etc...
// Je te laisse effectuer plus avant les vérifications... ;)
.
.
.
$cde = "Votre formulaire à bien été...";
}
// Si tu n'es pas encore passé par le formulaire et qu'aucun "login" n'est déclaré
//
if (!isset($_SESSION[nom]) && isset($_POST[form])
{
// En admétant que le formulaire soit dans un fichier à inclure
//
if (!file_exists($fileName)) die("Le fichier n'existe pas !");
require_once("./".$fileName);
// $_POST[form] n'existe pas mais il est possible que d'autres éléments soient présents.
// on lance la fonction (à toi de la créer) getForm() OU le nom que tu veux
//
$form = getForm($_POST);
.
.
.
$cde .= $form;
}
// Suivi de la page index.php
.
.
.
$cde ."</html>\n";
echo $cde;
Cela dit, ce n'est qu'une piste, pas forcément ce que tu recherches mais...
Et depuis quand on ne pourrait pas mémoriser un tableau directement dans une variable de session ?A la réception du formulaire, quand tu as toutes les infos.Edit: euuh.. par contre, c'est à quel moment que j'enregistre toutes mes variables dans la session? Au moment de l'envoi du formulaire? Ou bien dans le script qui récupère le login?
Attention: Tu ne peux mémoriser un tableau ou un objet sans sérialiser d'ou la fonction: serialize(xxx).
Pour récupérer tableaux et objets te suffit d'utiliser la fonction inverse qui est: unserialize(xxx).
Dans cette approche tu as aussi les fonctions : __sleep et __wakeup
http://www.manuelphp.com/php/language.o ... ctions.php
@+
$_SESSION['post'] = $_POST;
echo '<pre>';
print_r($_SESSION['post']);
echo '<pre/>';Peut-être parceque c'est pas "super" propre, mais je cherche la petite bêteEt depuis quand on ne pourrait pas mémoriser un tableau directement dans une variable de session ?
$_SESSION['post'] = $_POST; echo '<pre>'; print_r($_SESSION['post']); echo '<pre/>';
if ( $login != NULL){
// stockage des données dans des variable de session
$_SESSION['Login']=$login;
header('WWW-Authenticate: None'); // nécessaire pour que $_POST ne soit pas vide
}
Voilà j'espère que cela t'aura aider, même si la solution viens un peu tard...
en haut à droite de la réponse qui te semble la plus pertinente.