détruire une session à la fermeture du navigateur !?! (réponse inside) - PHP - Programmation
Marsh Posté le 25-04-2003 à 14:43:30
Heu... Les sessions php sont détruites à la fermeture du navigateur... Enfin, en tout cas, sur IE 5 et 6, Mozilla 1+ et Opera 6+
Marsh Posté le 25-04-2003 à 14:55:28
nero27 a écrit : Elle n'est pas détruite chez moi pourtant |
hé ??
C'est quoi ta session miraculeuse ? Tu n'aurais pas des cookies qui trainent en plus par hasard ? Laisse-moi deviner... Tu as copié un script qui utilisent des sessions, et la session ne se ferme pas à la fermeture du navigateur... C'est bien ça ?
Marsh Posté le 25-04-2003 à 14:57:47
Hermes le Messager a écrit : |
En fait c tout con, cf php.ini
Marsh Posté le 25-04-2003 à 14:57:51
Hermes le Messager a écrit : |
Non, j'ai créé moi-même le script et je n'utilise pas les cookies (désactivés dans le fichier php.ini) !
Marsh Posté le 25-04-2003 à 14:58:28
samuelp a écrit : |
on règle ça dans php.ini ?
C'est quelle valeur qu'il faut changer ?
Marsh Posté le 25-04-2003 à 15:03:05
nero27 a écrit : |
Alors, tu es l'heureux possesseur du SEUL navigateur que je connais qui ne ferme pas les sessions...
Marsh Posté le 25-04-2003 à 15:07:22
Hermes le Messager a écrit : |
Qu'est-ce que tu entends par fermer la session !
Parce que oui, quand je ferme le navigateur et que je le réouvre, la session change. Mais moi ce que je veux, c'est que quand je ferme IE, c'est que la session soit effacée du dossier sessions du serveur !
Marsh Posté le 25-04-2003 à 15:25:28
nero27 a écrit : |
pourquoi faire ?
Marsh Posté le 25-04-2003 à 15:41:09
Hermes le Messager a écrit : |
pour éviter qu'un autre utilisateur se serve du cache de IE pour se connecter sur une session "résiduelle" et donc utiliser les habilitations d'un autre !
Marsh Posté le 25-04-2003 à 15:42:14
si tu définis un temps d'expiration du cookie de session à 0 le cookie est détruit à la fermeture du browser
sans cookie, et avec un id d'url inexistant (puisque navigateur fermé) il est impossible de récupérer la session précédente
je vois pas pourquoi faut obligatoirement lancer le garbage ...
Marsh Posté le 25-04-2003 à 15:45:18
et bien, dans le cache de IE, l'url reste avec le SID en bout de ligne
Marsh Posté le 25-04-2003 à 15:56:24
voila pq il est intéressant pour l'utilisateur d'utiliser un bouton "déconnexion" comme sur hotmail par exemple...
tu peux pas le faire à sa place.
Ce que tu peux faire, c'est diminuer le temps de vie des fichiers sessions sur le serveur en nettoyant fréquemment le répertoire.
Marsh Posté le 25-04-2003 à 16:03:35
Ok, mais, j'ai intérêt d'avoir des utilisateurs très attentifs, parce que mon application est qd mm destinée à des utilisateurs non informaticiens qui oublieront 2 fois sur 3 de se délogguer
De plus, il y a toujours des petits malins qui sont capables de comprendre qu'en utilisant l'URL d'un autre, il est possible d'utiliser ses habilitations !
Donc, pour en revenir à mon idée départ, n'est-il pas possible de lancer un script PHP (qui effacerait la session) par le biais de JS lors de la fermeture du navigateur ?
Marsh Posté le 25-04-2003 à 16:32:36
faudrait savoir hein
soit ce sont pas des informaticiens et ils savent même pas où se trouve les fichiers de cache
soit ils savent et alors authentification avec déconnexion obligatoire...
Marsh Posté le 25-04-2003 à 16:53:32
Sh@rdar a écrit : faudrait savoir hein |
bah en fait, c'est pas des informaticiens, mais y'en a qd mm 1 ou 2 qui sont un petit peu plus malins que les autres
Marsh Posté le 25-04-2003 à 16:57:50
associe une session avec une IP, tu vas voir qu'ils feront ptet moins les malins deja (valable si ton site est plutot destiné à bcp de machines et non pas une borne pour 30 personnes)
Marsh Posté le 25-04-2003 à 17:00:21
masure a écrit : associe une session avec une IP, tu vas voir qu'ils feront ptet moins les malins deja (valable si ton site est plutot destiné à bcp de machines et non pas une borne pour 30 personnes) |
et bien, c'est ça lme problème, c'est que plusieurs personnes peuvent utiliser la même machine
Marsh Posté le 25-04-2003 à 17:04:52
Ya ptet moyen de bricoler ca avec le http_referer stocké dans une var de session. Un truc qui te jette si ton referer ne correspond pas avec celui de la session.
un gars se balade tranquille :
referrer du server = referrer de la session
ton gars ferme ie et un autre passe derriere :
refferer du server != referrer de session puisque IE reouvert ...
Enfin c'est vraiment se raccrocher aux branches mais si tu veux faire chier les ptits malins, la je crois qu'ils vont pleurer
Marsh Posté le 25-04-2003 à 17:10:33
je connais pas ce truc : je vais regarder ça de plus près
Marsh Posté le 25-04-2003 à 17:22:15
Salut
Je me suis posé la même question que toi et je pense avoir trouvé une solution : tu crées un une page avec deux cadres : un qui occupe une largeur de 1 pixel et l'autre le reste de la page.
Quand l'utilisateur est sur ton site, il navigue dans le second cadre, et dans le premier tu mets un événement javascript onUnload qui ouvre un fichier php qui ferme la session.
Ca donne :
<frameset rows="*" cols="1,*" framespacing="0" frameborder="NO" border="0">
<frame src="deconnexion.htm" name="detect">
<frame src="pageprincipale.htm" name="page" noresize>
</frameset>
<noframes><body>
</body></noframes>
</html>
Pour la page qui contient les cadres
Dans deconnexion.htm tu mets :
<HTML>
<HEAD>
</HEAD>
<BODY onUnload="open('logout.php';">
</BODY>
</HTML>
Ce qui ouvre logout.php qui te ferme la session
L'inconvénient c que ca fait une popup mais bon ...
Je peux pas te garantir a 100% que ca marche mais chez moi ca fonctionne
Ca pose un probleme si l'utilisateur veut actualiser sa page aussi mais on doit pouvoir y remédier
Voila
Marsh Posté le 25-04-2003 à 17:27:38
y'a de l'idée
Y'a peut-être moyen de mettre la frame de gauche dans une iframe, non ?
Ca règlerait peut-être le pb de l'actualistation
Marsh Posté le 25-04-2003 à 17:27:42
luap7 a écrit : |
Chez moi, ça va rien faire ce truc.
Marsh Posté le 25-04-2003 à 17:28:58
kadreg a écrit : |
pkoi, parce que tu as désactivé le javascript ?
Moi, j'ai pas de pbs là-dessus, c'est pour un intranet d'entreprise : tous les postes sont réglés par nos soins
Marsh Posté le 25-04-2003 à 17:30:54
nero27 a écrit : |
Parceque mozilla n'honore pas les open et les close dans une fonction OnLoad et OnUnload
Marsh Posté le 25-04-2003 à 17:34:29
Du moment qu'ils utilisent IE sur les pc ou tu veux utiliser ton truc ca va ...
Pour les iframes je sais pas si ca peut marcher je vais tester mais bon c pareil ca marchera que avec IE ...
Marsh Posté le 25-04-2003 à 17:35:09
kadreg a écrit : |
ca va, ici c'est IE !
Mais c'est sûr que mozilla évite les problèmes de pop up de cette façon
Marsh Posté le 25-04-2003 à 18:00:00
J'ai essayé avec une iframe mais ca a pas marche
Mais j'ai voulu vérifier et en fait l'actualisation ca marchait meme avec une frame (en tt cas chez moi) j'avais pas teste...
Marsh Posté le 25-04-2003 à 18:25:20
suffit d'utiliser des cookies au lieu du sid dans les urls
Marsh Posté le 25-04-2003 à 22:17:41
Tu peux désactiver l'affichage du SID dans l'url.....
Voir "--enable-trans-sid" dans php.ini
Pourquoi vous prendre la tête????
Perso je fais ça:
- j'arrive sur le site page index....
- je vais sur la zone admin ou client.. par ex...
- la page d'authentification s'ouvre...
- et se redirige vers la page du menu de l'utilisateur (celle ci ne dois pas être fermée ni actualisée car javascript de fermeture lié à l'événement "unload" )
- si je clique sur une action du menu (un lien) cela ouvre une autre page (target='_blank'... et c'est sur ces page que l'utilisateur travaille..
Ainsi il peux faire ce qu'il veux, quand il a fini de travailler il ferme sa page et la session se ferme, les variables de session sont détruites etc.. etc.. (stats)
Cela en complément d'un lien "déconnexion" sur toutes les pages (ne réagissant pas tout le tps de la même façon mais bon..)
Si tu TAF sur ton propre serveur, tu peux affecter un nom de session différent pour chacun de tes clients.. (son nom plus un "ID" par ex..) Moi je voulais l'utiliser pour mes stats, toi ptetre tu peux en faire une sécurité..
Marsh Posté le 25-04-2003 à 22:30:16
Chrono a écrit : Tu peux désactiver l'affichage du SID dans l'url..... |
et c'est faux en plus
Marsh Posté le 25-04-2003 à 22:32:27
tu dis que tu n'utilises pas le sid, tu utilises donc un cookie à la place pour gerer tes sessions
si tu ouvres une nvlle fenetre, c'est pas pour ça que le navigateur va tuer le cookie quand elle sera fermée, vu qu'il y a tjs l'autre d'ouverte
et puis baser ta securité sur le fait d'ouvrir une autre fenetre (ce qui est deja tres laid) franchement
Marsh Posté le 25-04-2003 à 22:35:54
j'utilise le SID mais il n'est pas apparent dans l'url grace à "--enable-trans-sid" du php.ini...
je n'utilise pas de cookie T ouf !
Autrement, ca fais très cool..
- J'arrive sur la page de menu (une seule page d'ouverte)
- j'ouvre une page (elle s'ouvre en plein écran, pour l'user C invisible..) donc 2 pages..
Sérieusement ça fais propre..
Marsh Posté le 25-04-2003 à 22:45:12
Ben oui mais CT la seule façon que G trouvé pour répondre à mon besoin..
Javascript.. ok tant pis..
target='_blank' car il fô pouvoir travailler en même temps sur plusieurs pages ouvertes..
Marsh Posté le 25-04-2003 à 22:50:06
Chrono a écrit : j'utilise le SID mais il n'est pas apparent dans l'url grace à "--enable-trans-sid" du php.ini... |
Moi, je trouve pas ça propre.
Et les utilisateur en général, détestent cacher leur barre des taches. Si tu aimes faire peur aux gens qui n'y conaisssent rien en informatique (du genre qui sont perdus quand une feuille se coince dans l'imprimante) tu t'y prends bien.
Et si c'est du plein écran mais sans cacher la barre des taches alors on voit bien qu'il y a deux fenêtre d'ouverte.
Je peux parler de ce problème, j'ai a ma charge une centaine de PC là où je bosses et je peux te dire que les utilisateurs peuvent ce révéler très emmerdant quand tu leur changes leurs habitudes.
Marsh Posté le 25-04-2003 à 22:54:55
Je ne l'ouvre pas en PLEIN écran sans les barres..
Elle s'ouvre entièrement quoi.. en grand...
Ben je me suis prêtre mal exprimé..Désolé
Mais il voit la page ou il travaille.. normal..
Et la page de menu (qu'il ne fô pas fermer.. mais C indiqué)
C'est indispenssable à mon cahier des charges donc je ne vois pas le problème..
Marsh Posté le 25-04-2003 à 23:02:15
Chrono a écrit : j'utilise le SID mais il n'est pas apparent dans l'url grace à "--enable-trans-sid" du php.ini... |
et il est ou alors le sid a ton avis
(et keske ça a de ouf d'utiliser un cookie correctement )
Marsh Posté le 25-04-2003 à 23:04:12
je n'utilise pas de cookie car les clients n'aiment pas les cookies...
Le SID est dans l'url mais invisible
Marsh Posté le 25-04-2003 à 14:41:03
Voilà mon problème : je voudrais que lorsque l'utilisateur ferme son navigateur, la session en cours soit détruite.
Seulement, après recherche, il apparait que cela est impossible
Mais, je me demandais quand même s'il n'était pas possible de détecter la fermeture du navigateur en javascript (je précise au passage que je n'y connais pas grand chose dans ce langage) et d'appeler un script PHP qui détruirait la session : Qu'en pensez-vous ?
EDIT : réponse page 3 !!!
Message édité par nero27 le 29-04-2003 à 12:15:32