Autor Zpráva
Ben
Profil *
Ahoj,
toto mi zjišťuje přihlášeného uživatel z windows:

$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\x00\x00\x00". // target name len/alloc
			"\x00\x00\x00\x00". // target name offset
			"\x01\x02\x81\x00". // flags
			"\x00\x00\x00\x00\x00\x00\x00\x00". // challenge
			"\x00\x00\x00\x00\x00\x00\x00\x00". // context
			"\x00\x00\x00\x00\x00\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("\0", '', substr($msg, $off, $len));
			else
				return substr($msg, $off, $len);
		}
		$user = get_msg_str($msg, 36);
		$domain = get_msg_str($msg, 28);
		$workstation = get_msg_str($msg, 44);


//		print "You are $user from $domain/$workstation";
	}
}



Funguje to skvěle a přesně podle mých představ. Problém je v tom, že pokud uživatel navštíví stránku s tímto scriptem, tak na té další mi přestane fungovat toto vyhledávání(resp. mi to vrátí else a žádnou chybovou hlášku mi to nevypíše):

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
  <label for="prijmeni">Zadej příjmení:</label>
  <input type="text" style="display:none;" name="kvuliHloupemuIE" value="1" />
  <input type="text" name="hledat" value="" />
  <br />
  <br /> 
 
  <input type="submit" name="vyhledavac" value="Hledej" />
</form>
<br />

<?php 

 if($_POST['hledat'] or $_POST['vyhledavac'])
         {require "vyhledej.php";}
      
      else{...
        



Nějaké nápady, proč tomu tak je?
Ben
Profil *
Jo a btw, pokud zakomentuju ten kód na zjištění uživatele z windows, tak mi to funguje :-/
Alphard
Profil
Co bylo v print_r($_POST); po odeslání hledání? Na první pohled žádnou souvislost nevidím.
Ben
Profil *
Alphard:
Co bylo v print_r($_POST); po odeslání hledání?

Vrací hodnoty dle zadání do formuláře. Poté co navštím stránku se scriptem výše, se nesplní tato podmínka:
if($_POST['hledat'] or $_POST['vyhledavac'])
a vrací to vše z false
Když zavřu celý prohlížeč a znovu otevřu, tak se podmínika plní zase do doby než navštívím stránku se scriptem na zjištění jména uživatele z win.

Nějak už mi došli nápady :-/
Ben
Profil *
Alphard:
„Co bylo v print_r($_POST); po odeslání hledání?“

Vrací hodnoty dle zadání do formuláře.

Poté co navštím stránku se scriptem výše, se nesplní tato podmínka:
„if($_POST['hledat'] or $_POST['vyhledavac'])“ a vrací to vše z false.

Když zavřu celý prohlížeč a znovu otevřu, tak se podmínika plní zase do doby než navštívím stránku se scriptem na zjištění jména uživatele z win.

Nějak už mi došli nápady :-/
Majkl578
Profil
Jsou data přítomna v $_POST a/nebo $_REQUEST i po použití scriptu na autorizaci? Chová se to stejně ve všech prohlížečích?
Ben
Profil *
Majkl578:
Jsou data přítomna v $_POST a/nebo $_REQUEST i po použití scriptu na autorizaci? Chová se to stejně ve všech prohlížečích?

print_r($_REQUEST);
print_r($_POST);
jsou po vykoná scriptu prázdné.

Chová se tak pouze IE, jinak ostatní prohlížeče fungují, přesně jak mají.
Ben
Profil *
Tak problém jsem vyřešil otevřením nového okna prohlížeče a následným zavřeným javascriptem. Ale pokud někoho napadne nějaké elegantní řešení.... :)
vynalezce
Profil
Ben:
Tak problém jsem vyřešil otevřením nového okna prohlížeče a následným zavřeným javascriptem. Ale pokud někoho napadne nějaké elegantní řešení…. :)

A co<iframe>?
Ben
Profil *
vynalezce:
A co<iframe>?

Už to mám hotové v tom JS, ale děkuji!

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0