Fermer une session htaccess

Résolu/Fermé
Woody69 Messages postés 125 Date d'inscription lundi 21 avril 2008 Statut Membre Dernière intervention 22 mars 2012 - 8 janv. 2009 à 16:12
 La chouette - 21 juin 2014 à 01:53
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

Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016 920
9 janv. 2009 à 10:08
à 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.
6
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
9 janv. 2009 à 10:34
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
4
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
3
Attention au Basic realm="acces restreint" (il faut bien mettre le nom de votre realm du fichier .htaccess) :p
2

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
8 janv. 2009 à 17:51
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();
?>

1
jpharand Messages postés 40 Date d'inscription jeudi 4 juin 2009 Statut Membre Dernière intervention 19 novembre 2013 2
Modifié par jpharand le 18/12/2013 à 18:18
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.
1
Woody69 Messages postés 125 Date d'inscription lundi 21 avril 2008 Statut Membre Dernière intervention 22 mars 2012 9
8 janv. 2009 à 18:25
Merci pour le code

Je dois créer une nouvelle page php et insérer le code, puis faire un lien vers cette page ?
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
8 janv. 2009 à 19:52
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
0
Woody69 Messages postés 125 Date d'inscription lundi 21 avril 2008 Statut Membre Dernière intervention 22 mars 2012 9
8 janv. 2009 à 21:26
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 :)
0
La chouette
21 juin 2014 à 01:53
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.
0
Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016 920
8 janv. 2009 à 21:28
salut,

Alain ne m'en voudra pas de te répondre à sa place, c'est une FAQ.
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
8 janv. 2009 à 21:33
Pas de problème Dalida.

Et meilleurs voeux 2009 en passant
0
Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016 920
9 janv. 2009 à 09:14
salut Alain,

santé, chance, bonheur, et tout, et tout…
-:o)
0
Woody69 Messages postés 125 Date d'inscription lundi 21 avril 2008 Statut Membre Dernière intervention 22 mars 2012 9
9 janv. 2009 à 09:38
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
0
Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016 920
9 janv. 2009 à 09:46
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.
0
Woody69 Messages postés 125 Date d'inscription lundi 21 avril 2008 Statut Membre Dernière intervention 22 mars 2012 9
9 janv. 2009 à 09:59
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 ?
0
Woody69 Messages postés 125 Date d'inscription lundi 21 avril 2008 Statut Membre Dernière intervention 22 mars 2012 9
10 janv. 2009 à 15:32
Super ça fonctionne enfin !

Merci et bonne continuation à tous !!
0
js95 Messages postés 773 Date d'inscription samedi 14 juin 2008 Statut Membre Dernière intervention 29 juillet 2014 353
18 août 2010 à 16:48
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 !
0
js95 Messages postés 773 Date d'inscription samedi 14 juin 2008 Statut Membre Dernière intervention 29 juillet 2014 353
31 août 2010 à 10:03
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.
0