Come verificare accesso ad area http auth basic?

mauf

Nuovo Utente
24 Giu 2013
3
0
0
Bregano (VA)
Ho un sito con un'area ristretta che richiede autenticazione tramite http basic auth e, ovviamente, un'area pubblica.

Dalle alcune pagine dell'area pubblica vorrei mostrare dei link a contenuti dell'area privata solo a chi si sia già autenticato per quell'area.

Non ho bisogno di (o meglio non voglio) iniziare l'autenticazione dall'area pubblica né voglio/posso pubblicare il link in modo visibile a chi quel file non potrebbe accedere per mancanza di credenziali.

Ho provato con $_SERVER['REMOTE_USER'] ma questa è visibile solo nel sotto-albero dove è avvenuta l'autenticazione... ho provato anche una fopen("http://url....") ma fallisce sia che mi sia autenticato che non (per mancanza di auth)...

L'ultima spiaggia (sarà l'aria estiva?) che mi rimane (o che vedo) è di impostare una variabile di sessione nella prima pagina dell'area riservata e testarla in quella pubblica... ma, se non altro per esercizio di stile, mi piacerebbe capire se si possa risolvere usando solo la "basic auth"...

Grazie a tutt* per qualsiasi suggerimento.

mauf
 
scusa se ti chiedo ma da quello che hai scritto qualcosa non mi torna puoi postarmi il codice dell'autentificazione http basic?
 
Non sto cercando di autenticarmi ma di capire se l'utente che visita una pagina pubblica (che non richiede auth) si sia già autenticato in un'area ristretta dello stesso sito prima di passare nell'area pubblica (e con che nome).

L'autenticazione che uso è quella basic di http non quella iniziata da php, questo il contenuto di .htaccess:
AuthType Basic
AuthName "good fellas only"
AuthUserFile /web/htdocs/www.mydomain.com/secretpart/.htpasswd
require valid-user

Se io esamino $_SERVER['REMOTE_USER'] in /secretpart/index.php trovo il nome di chi si è autenticato (tramite http) ma se poi passo in /public/altra_pagina.php la variabile non è impostata (in /secretpart/daqualcheparte/pagina_segreta.php lo dovrebbe essere, perché all'interno dell'area auth, anche se non ho provato).
 
cioè io stavo pensando che il problema poteva essere sul cookie cioè nel cookie viene indicato se deve essere valido in una directory e sotto directory --- quindi dipende da come hai settato quell' opzione es: setcookie("TestCookie", $value, time()+3600, "/dir/", "example.com", 1); quindi qui gli dici anche in che cartella è valido se invece di "dir" metti slash dovrebbe essere valido dalla root del web quindi anche nella pagina iniziale puoi far in modo che uno veda o meno una parte della pagina ... non sò se mi sono spiegato sappimi dire ciao.
 
La spiegazione è ottima, ma sono completamente passivo riguardo l'autenticazione che viene effettuata dal web server... quindi non sono io che invio cookie o hedaer...
e tutto sommato, ripensandoci, quello che sto cercando di fare potrebbe essere anche considerato "intrusivo" rispetto alla privacy (ad es. in un sito condiviso tipo blog o multiuser) quindi penso di accontentarmi della soluzione con variabile di session...

Grazie e ciao,
mauro
 
ottima scelta anche le sessioni implementano i cookie, alla prossima ciao
 
Puoi controllare se un utente ha effettuato l'autentificazione tramite HTTP, attraverso la superglobale $_SERVER["PHP_AUTH_USER"].

Hai gia provato questa variabile?

Puoi addirittura gestire l'autentificazione HTTP direttamente tramite PHP proprio grazie questa variabile.
Dai un occhio a questo snippet.
PHP:
<?php
if (!isset($_SERVER['PHP_AUTH_USER'])) {
    header('WWW-Authenticate: Basic realm="Il Mio Reame"');
    header('HTTP/1.0 401 Unauthorized');
    echo 'Testo da inviare se l'utente preme cancel';
    exit;
} else {
    echo "<p>Ciao {$_SERVER['PHP_AUTH_USER']}.</p>";
    echo "<p>Hai inserito questa stringa: {$_SERVER['PHP_AUTH_PW']} come password</p>";
}
?>
 
Ultima modifica di un moderatore:
alexa337 ricorda di formattare il codice. Si potrebbero notare degli errori nella sintassi molto più facilmente (come ad esempio in questo caso).
 

Discussioni simili