| ||||||||||
Kapitola 17. HTTP autentikace a PHPProst°edky HTTP autentikace jsou v PHP p°φstupnΘ pouze pokud PHP b∞╛φ jako modul Apache, tudφ╛ nejsou p°φstupnΘ v CGI verzi. V PHP skriptu b∞╛φcφm pod modulem Apache lze pou╛φt funkci header() k odeslßnφ zprßvy "Authentication Required" klientskΘmu browseru, co╛ vyvolß zobrazenφ dialogovΘho okna pro vlo╛enφ u╛ivatelskΘho jmΘna a hesla. Jakmile u╛ivatel zadß jmΘno a heslo, URL obsahujφcφ tento PHP skript se zavolß znovu s prom∞nn²mi $PHP_AUTH_USER, $PHP_AUTH_PW and $PHP_AUTH_TYPE obsahujφcφmi jmΘno, heslo a typ autentikace. V souΦasnosti je podporovßna pouze "Basic" autentikace. Vφce informacφ viz funkce header(). Nßsledujφcφ fragment k≤du m∙╛e poslou╛it jako ukßzka vy╛ßdßnφ autentikace u╛ivatele na strßnce: Mφsto protΘho vyti╣t∞nφ $PHP_AUTH_USER a $PHP_AUTH_PW byste asi cht∞li ov∞°it platnost zadanΘho jmΘna a hesla. Nap°φklad dotazem v databßzi nebo vyhledßnφm u╛ivatele v dbm souboru. Pozor na chybovΘ browsery Internet Explorer. Zdß se, ╛e jsou velice vybφravΘ, pokud jde o po°adφ hlaviΦek. Zdß se, ╛e odeslßnφ hlaviΦky WWW-Authenticate p°ed hlaviΦkou HTTP/1.0 401 zabφrß. Aby se zabrßnilo psanφ skript∙ odhalujφcφch hesla na strßnkßch autentikovan²ch n∞kter²m z tradiΦnφch externφch mechanism∙, PHP_AUTH prom∞nnΘ se nevytvo°φ, pokud je pro tu kterou strßnku zapnuta externφ autentikace. V takovΘm p°φpad∞ m∙╛ete k identifikaci extern∞ autentikovanΘho u╛ivatele pou╛φt prom∞nnou $REMOTE_USER. V╣imn∞te si nicmΘn∞, ╛e v²╣e uvedenΘ nezabrßnφ krßde╛φm hesel z autentikovan²ch URL osobou, kterß ovlßdß neautentikovanou URL na stejnΘm serveru. Jak Netscape, tak Internet Explorer po p°ijetφ response k≤du 401 vyprßzdnφ autentikaΦnφ cache souΦasnΘho realmu. Tak m∙╛ete u╛ivatele v podstat∞ "odlogovat". N∞kte°φ lidΘ toho vyu╛φvajφ k "vypr╣enφ" p°ihlß╣enφ nebo tvorb∞ odhla╣ovacφho tlaΦφtka.
Podle standardu HTTP Basic authentication se toto chovßnφ nevy╛aduje, tak╛e byste na to nikdy nem∞li spolΘhat. Pokusy s Lynxem ukßzaly, ╛e Lynx po p°ijetφ response k≤du 401 nevyprßzdnφ autentikaΦnφ ·daje, tak╛e po stisknutφ back a forward se znovu ukß╛e po╛adovan² zdroj (pokud se nezm∞nily po╛adavky na ·daje). Dßle si v╣imn∞te, ╛e tato vlastnost p°i pou╛itφ IIS serveru a CGI verze PHP dφky omezenφm IIS nefunguje. | ||||||||||
|