Autor | Zpráva | ||
---|---|---|---|
Ben Profil * |
#1 · Zasláno: 26. 7. 2010, 19:17:56
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 * |
#2 · Zasláno: 26. 7. 2010, 19:29:18
Jo a btw, pokud zakomentuju ten kód na zjištění uživatele z windows, tak mi to funguje :-/
|
||
Alphard Profil |
#3 · Zasláno: 26. 7. 2010, 23:01:57
Co bylo v
print_r($_POST); po odeslání hledání? Na první pohled žádnou souvislost nevidím.
|
||
Ben Profil * |
#4 · Zasláno: 27. 7. 2010, 18:35:39
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 * |
#5 · Zasláno: 27. 7. 2010, 18:36:45
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 |
#6 · Zasláno: 29. 7. 2010, 01:01:56
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 * |
#7 · Zasláno: 29. 7. 2010, 15:28:58
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 * |
#8 · Zasláno: 29. 7. 2010, 16:20:06
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 |
#9 · Zasláno: 29. 7. 2010, 19:38:40
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 * |
#10 · Zasláno: 29. 7. 2010, 20:09:40
vynalezce:
„A co<iframe>?“ Už to mám hotové v tom JS, ale děkuji! |
||
Časová prodleva: 14 let
|
0