Fermer une session htaccess [Résolu/Fermé]

Signaler
Messages postés
125
Date d'inscription
lundi 21 avril 2008
Statut
Membre
Dernière intervention
22 mars 2012
-
 La chouette -
Bonjour,

J'ai lu dans plusieurs forum qu'il était possible de créer un bouton "Déconnexion" qui pemettrait de déconnecter un utilisteur s'étant connecté via un .htaccess, et ce via un "header"...

Bref, en gros est-ce que quelqu'un pourrai m'expliquer la marche à suivre pour établir un processus de déconnexion lors d'une connexion par htaccess ?

16 réponses

Messages postés
6728
Date d'inscription
mardi 14 mai 2002
Statut
Contributeur
Dernière intervention
11 janvier 2016
901
à priori, depuis la page sécurisée tu fais un lien vers logout.php,
soit dit en passant, tu dois pouvoir limiter le script à :
<?php
header('WWW-Authenticate: Basic realm="private"');
header('HTTP/1.0 401 Unauthorized');
?>

le exit(); ne sert à rien puisque le script se termine tout seul et ça ne sert à rien d'envoyer un message puisque la boite de dialogue de connexion doit se ré-afficher toute seule. à toi de voir.

le script tu dois pouvoir le mettre n'importe où, il suffit d'adapter l'url du lien de déconnexion, là aussi il faut tester.
4
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
5358
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
886
Voilà celui que j'ai testé,il fonctionnne sous EasyPhp

<?php
//// deconnexion d'une authentification faite par .htaccess
// realm doit être le même que celui de .htaccess 
//realm c'est AuthName "......."
header('WWW-Authenticate: Basic realm="Acces protege"');
header('HTTP/1.0 401 Unauthorized');
echo 'Texte affiche en cas d\'annulation';
exit();
?> 


C'est vrai que le exit(); ne sert à rien
Sinon crée un lien vers "http://www.ton-site.com/"
Le browser essaiera de se connecter avec le user logout qui a priori n'existe pas et aura pour effet de fermer la session precedente
Attention au Basic realm="acces restreint" (il faut bien mettre le nom de votre realm du fichier .htaccess) :p
Messages postés
5358
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
886
Bonsoir,

tiens j'ai trouvé ça sur un forum je n'ai pas testé perso, amis apparemment ça marche:


<?php
//// deconnexion d'une authentification faite par .htaccess
// realm doit être le même que celui de .htaccess 
//realm c'est AuthName "......." du htaccess
header('WWW-Authenticate: Basic realm="private"');
header('HTTP/1.0 401 Unauthorized');
echo 'Texte affiche en cas d\'annulation';
exit();
?>

Messages postés
40
Date d'inscription
jeudi 4 juin 2009
Statut
Membre
Dernière intervention
19 novembre 2013
2
J'ai fini par y arriver (sans réafficher la popup d'authentification !) en compilant des idées d'ici et de là (http://www.ssi-developer.net/htaccess/htaccess_logout.shtml
... et ça semble marcher !

En gros :
Mon dossier "racine" nécessite une authentification, gérée par un fichier .htaccess (et un fichier paswd). Une fois identifié, je navigue dans mon site.
Dans mon dossier "racine", j'ai un dossier "deconnexion", qui contient deux fichiers :
- aurevoir.html (en gros, c'est une jolie page qui dit juste "déconnexion réussie" ;-)
- .htaccess (différent du .htaccess déjà cité) dont voici le contenu :
<Files aurevoir.html>
<Limit ALL>
AuthUserFile /chemin_vers_mon_htpaswd/.htpasswd
require user fakeuser
</Limit>
</Files>
SetEnv PHP_VER 5
En gros il limite l'accès à tous les fichiers de ce répertoire au seul utilisateur "fakeuser" (qui n'est pas un utilisateur ayant le moindre droit sur mon dossier "racine").
(La ligne "AuthUserFile /chemin_vers_mon_htpaswd/.htpasswd" me semble inutile, mais bon, je n'ai pas osé l'enlever...)

Et donc, une fois connecté dans mon site. Comment me déconnecter ?
J'ai un bouton "Quitter l'application" qui me redirige vers un fichier deconnexion.php dont voici la source :
<?php
header("Location: http://fakeuser:fakepass@oustt.alterre-bourgogne.org/deconnexion/aurevoir.html");
exit;
?>
Celui-ci force une redirection vers mon dossier connexion avec l'utilisateur "fakeuser". Cet utilisateur est accepté par le .htaccess du dossier deconnexion. Ma page "aurevoir.html" s'affiche donc correctement.
Et comme je suis connecté en tant que fakeuser, je ne suis plus connecté à mon appli principale.

Enfin, ça m'a tout l'air de fonctionner, car je n'arrive pas à retrouver mon appli sans devoir me reconnecter.
Messages postés
125
Date d'inscription
lundi 21 avril 2008
Statut
Membre
Dernière intervention
22 mars 2012
9
Merci pour le code

Je dois créer une nouvelle page php et insérer le code, puis faire un lien vers cette page ?
Messages postés
5358
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
886
Oui c'est ça je viens de faire l'essai ça marche, qd tu cliques sur le lien ça ré affiche le pop up demandant les login et passwd
Messages postés
125
Date d'inscription
lundi 21 avril 2008
Statut
Membre
Dernière intervention
22 mars 2012
9
Lorsque je fais un lien vers mon fichier logout.php contenant ton code, voici ce que j'ai :

Warning: Cannot modify header information - headers already sent by (output started at /mnt/145/sdb/b/3/toprougemedias/Site/logout.php:9) in /mnt/145/sdb/b/3/toprougemedias/Site/logout.php on line 13

Warning: Cannot modify header information - headers already sent by (output started at /mnt/145/sdb/b/3/toprougemedias/Site/logout.php:9) in /mnt/145/sdb/b/3/toprougemedias/Site/logout.php on line 14
Texte affiche en cas d'annulation

Peux tu m'expliquer stp ? Merci :)

Bonjour, juste un petit commentaire pour ceux qui auront ce genre de problème.
En fait un header doit être placer avant tout script html, sinon, on à ce type d'erreur.
Ainsi, lorsque l'on inclut des page dans d'autre page, on oubli souvent ce petit détail qui provoque alors l'erreur.
Si tu regarde le code source de ta page lorsque l'erreur apparait, il y aura surement du html avant ton erreur.
Il faut donc placer impérativement le header avant ce code html.
Messages postés
6728
Date d'inscription
mardi 14 mai 2002
Statut
Contributeur
Dernière intervention
11 janvier 2016
901
salut,

Alain ne m'en voudra pas de te répondre à sa place, c'est une FAQ.
Messages postés
5358
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
886
Pas de problème Dalida.

Et meilleurs voeux 2009 en passant
Messages postés
6728
Date d'inscription
mardi 14 mai 2002
Statut
Contributeur
Dernière intervention
11 janvier 2016
901
salut Alain,

santé, chance, bonheur, et tout, et tout…
-:o)
Messages postés
125
Date d'inscription
lundi 21 avril 2008
Statut
Membre
Dernière intervention
22 mars 2012
9
Merci à tous pour vos réponses, mais la faq concerne les sessions en php.

Pour ma part, j'utilise un htaccess et htpsswd

Pourquoi est-ce que j'obtien des erreures lorsque je fait un lien vers pas page logout ?

Merci
Messages postés
6728
Date d'inscription
mardi 14 mai 2002
Statut
Contributeur
Dernière intervention
11 janvier 2016
901
hum, hum…

le message d'erreur te dit "je ne peux pas envoyer les headers, ils ont déjà été envoyés".

dans ton source il y a :
header('WWW-Authenticate: Basic realm="private"');
header('HTTP/1.0 401 Unauthorized');

et dans la FAQ on ne t'a pas dit que c'est réservé aux sessions !!!
Lorsque vous utilisez une fonction PHP qui manipule les en-têtes HTTP comme par exemple:
    * header()
    * setcookie()
    * session_start()

et on t'explique :
    *  J'utilise echo, ou print au début de mon script. Idem, si j'ai un espace dans mon script qui n'est pas compris dans mes balises php, il sera considéré comme faisant partie de la source de la page à envoyer, et les en-têtes le précéderont. Ce qui peut provoquer une erreur du genre de celles dont on cherche la solution pendant plusieurs jours :-)
    * Le serveur envoie ces données, et les fait précéder par défaut d'en-têtes qui signifient que c'est une page html.
    * Si après celà dans mon script j'utilise une fonction qui touche aux en-têtes, elle ne pourra plus le faire car les en-têtes ont déjà été envoyées. J'obtiens donc une erreur du genre "headers already sent".

on reprend :
- un espace ;
- le serveur commence à balancer les infos et donc les headers HTML ;
- tu veux modifier les headers alors qu'ils sont déjà partis ;
- le serveur t'affiche une erreur…

donc il faut que tu trouves ce qui est envoyé avant le début de ton script.
Messages postés
125
Date d'inscription
lundi 21 avril 2008
Statut
Membre
Dernière intervention
22 mars 2012
9
Ah ben voilà ! Là c'est clair !

Je dois vérifier le script de la page de déconnexion (si oui, elle ne contient que le code donné précédemment) ?
Dois-je placer la page logout.php avec le script dans le même dossier que le htaccess ?
Messages postés
125
Date d'inscription
lundi 21 avril 2008
Statut
Membre
Dernière intervention
22 mars 2012
9
Super ça fonctionne enfin !

Merci et bonne continuation à tous !!
Messages postés
769
Date d'inscription
samedi 14 juin 2008
Statut
Membre
Dernière intervention
29 juillet 2014
328
Je viens de tester ce script sur mon site internet, malheureusement je constate que la déconnexion ne se produit pas :
-> la fenêtre de connexion s'affiche grâce à ce script mais en cliquant sur Annuler il n'y a pas de déconnexion, quand je retape l'adresse du dossier protégé, la page s'affiche à nouveau.

Je ne vois vraiment pas en quoi ce script établit une déconnexion, je l'ai pourtant copié exactement, j'ai fait ce qui a été dit plus haut, rien à faire !
Messages postés
769
Date d'inscription
samedi 14 juin 2008
Statut
Membre
Dernière intervention
29 juillet 2014
328
A mon avis ce script ne marche pas sur tous les serveurs, et on ne peut rien faire, les variables $_SERVER sont en lecture seule...
A mon avis, ce script devait marcher mais les navigateurs ont évolué depuis l'année dernière, et ça ne marche plus. Je dis ça parce que j'ai un bon livre de 2009 pour créer des sites internet, et j'ai dû modifier un script utilisé dedans pour qu'il marche (la solution de 2009 ne marchait que sous Safari), parce que les navigateurs actuels ne se laissent plus berner par les scripts.