comment faire un logout en PHP avec WWW-Authenticate ?

Eléphant du PHP | 52 Messages

24 déc. 2011, 19:36

Bonjour à tous,

J'utilise cette petite fonction très sympa que j'ai trouvée sur le web pour protéger une page par mot de passe. Mais je ne suis pas arrivé à écrire une fonction logout.
Ca protège bien la page, on peut se connecter, mais Si quelqu'un revient sur la même page après moi, il est automatiquement loggué lui aussi. Pas de protection.
Donc problème de sécurité sur un ordinateur public ou en entreprise. J'aimerais pouvoir me déconnecter sans avoir à fermer le navigateur.

Voici le script. Quelqu'un à la solution ? :)

<?php

function protection($username, $password) {
if (!isset($_SERVER['PHP_AUTH_USER'])
|| $username != $_SERVER['PHP_AUTH_USER']
|| $password != $_SERVER['PHP_AUTH_PW']) {
header('WWW-Authenticate: Basic realm="Private"');
header('HTTP/1.0 401 Unauthorized');
return false;
}
return true;
}

if (protection('bobby', 'mySecretPassword')) {
echo "Bienvenue ".$_SERVER['PHP_AUTH_USER'];
} else {
echo "Vous n'avez pas accès à cette page.";
exit;
}

// Votre page php ici ....

ViPHP
xTG
ViPHP | 7331 Messages

24 déc. 2011, 21:10

Voici de quoi solutionner tout ça : http://linuxfr.org/forums/programmation ... econnexion

Eléphant du PHP | 171 Messages

24 déc. 2011, 21:30

En vidant $_SERVER['PHP_AUTH_USER'] j'aurais dit, mais je ne sais pas si c'est la solution la plus appropriée.
Le bon jugement s'apprend par l'expérience qui s'acquiert en partie par le mauvais jugement.

Eléphant du PHP | 52 Messages

24 déc. 2011, 22:02

Merci les gars. le fait est que je n'utilise pas de .htaccess car je voulais faire un truc super léger.

J'ai mis un lien "deconnexion" qui pointe vers dans ma page logout.php :

<?php
header('WWW-Authenticate: Basic realm="Private"');
header('HTTP/1.0 401 Unauthorized');
echo 'Texte affiche en cas d\'annulation';
exit();
?>

Quand on revient vers la page protégée, elle s'affiche toujours, et il faut la rafraichir, F5, puis cliquer sur annuler pour la déconnecter pour de bon. 3 clics donc...

Finalement ça ne déconnecte pas en un seul clic sur le lien "deconnexion". Je vais devoir mettre en place un .htaccess je pense.

Néanmoins, si quelqu'un arrive à le faire, juste en cliquant sur le lien "deconnexion", qu'il poste sa solution, je suis preneur si l'astuce existe. Mais je ne crois pas.
Merci en tous cas les gars! et Bonne soirée de Noël! :)

ViPHP
xTG
ViPHP | 7331 Messages

25 déc. 2011, 01:56

A tout hasard ton script de déconnexion se trouve sur une autre page ?
Peut être que le système prend en compte la page d’exécution, j'ai pas regardé la RFC, peut être qui jeter un œil t'aidera à comprendre le système.

Eléphant du PHP | 52 Messages

26 déc. 2011, 15:46

A tout hasard ton script de déconnexion se trouve sur une autre page ?
Peut être que le système prend en compte la page d’exécution
Oui, effectivement, le script de déconnexion appellait une autre page : logout.php

Après des recherches sur les sites américains de référence,(http://php.net/manual/en/features.http-auth.php)
ils disent qu'il est impossible de faire une deconnexion HTTP. ça n'existe pas.

(sinon il faut ajouter un système de sessions en PHP mais je ne le souhaitais pas sur ce coup, n'ayant qu'une seule page.)

C'est donc un systéme efficace pour protéger l'accès à une page, mais il faut impérativement fermer le navigateur après utilisation.
Si un quidam passe dérrière vous, il aura accès à la page avec le bouton précédent. Je ferme donc le navigateur de la page pour me déconnecter.

Je vais voir de le faire avec un miniformulaire intégré à la page en php, sans utiliser ni les sessions ni l'authentification http...
et je mettrai le script ici si ça marche.