Détruire une session PHP sur la page de quitter
J'ai besoin de détruire une session lorsque l'utilisateur quitte à partir d'une page en particulier. J'utilise session_destroy()
sur la fin de la page, mais ce n'est pas faisable pour moi, parce que ma page a la pagination. Ma page est: abc.php?page=1
ou abc.php?page=2
ou abc.php?page=3
.
Donc, j'ai besoin de détruire une session lorsqu'un utilisateur quitte de abc.php
page. Comment puis-je le faire sans l'aide d'un cookie?
double possible de Close/tuer la session du navigateur ou de l'onglet est fermé
thx bro.mais c'est une solution asp.je ne suis pas d'obtenir quelque chose de lui....Comment puis-je garder en vie ma session jusqu'à ce que l'utilisateur à visiter ma page abc.php.lorsque l'utilisateur quitte abc.php ensuite, il suffit de détruire la session.
En fait, la première réponse dans le fil relié est le bon, et pas à tous les ASP spécifique.
Correct, oui. Solution réelle, loin de là.
thx bro.mais c'est une solution asp.je ne suis pas d'obtenir quelque chose de lui....Comment puis-je garder en vie ma session jusqu'à ce que l'utilisateur à visiter ma page abc.php.lorsque l'utilisateur quitte abc.php ensuite, il suffit de détruire la session.
En fait, la première réponse dans le fil relié est le bon, et pas à tous les ASP spécifique.
Correct, oui. Solution réelle, loin de là.
OriginalL'auteur riad | 2010-07-05
Vous devez vous connecter pour publier un commentaire.
De faire quelque chose lorsque l'utilisateur quitte une page est pas la bonne approche, car vous ne savez pas si l'utilisateur de naviguer vers une autre page (dire contact.php pour le bien de l'argument) ou alors il/elle sera tout simplement aller à la page suivante de abc.php et, comme Borealid souligné, vous ne pouvez pas le faire sans JS. Au lieu de cela, vous pouvez simplement ajouter un vérifier et voir si l'utilisateur vient de abc.php:
Tout d'abord, dans votre abc.php fichier de définir une unique variable dans $_SESSION qui va agir comme une marque que l'utilisateur a été mis sur cette page:
Ajoutez ensuite ce sur toutes les pages, avant toute sortie de vérifier si l'utilisateur est à venir à partir de abc.php:
De cette façon, vous allez détruire la session (ou des variables spécifiques) seulement si l'utilisateur est à venir à partir de abc.php et la page en cours est une autre.
J'espère que j'ai été en mesure d'expliquer clairement ce.
Si il y a des données que vous souhaitez conserver dans le tableau de session, puis, au lieu de la détruire complètement, vous pouvez simplement désactiver uniquement les variables qui ont été mis sur abc.php en utilisant
unset($_SESSION['varname']);
au lieu desession_destroy()
, comme Karthik souligné.Pas très convivial. Que faire si je suis en ouvrir une autre page dans un onglet différent, mais toujours envie de continuer à utiliser
abc.php
en même temps?+ 1 pour être honnête, mais l'idée de détruire/suppression des variables de session sur la page quitter, sans à l'aide de JS est ce qui est à l'origine de cette faille pour commencer.
OriginalL'auteur Valentin Flachsel
À déclencher lorsque l'utilisateur en fait feuilles la page, vous devez utiliser Javascript pour envoyer une requête asynchrone au serveur. Il n'y a aucun moyen pour le serveur, par magie, savoir que l'utilisateur a "gauche", une page.
Voir http://hideit.siteexperts.com/forums/viewConverse.asp?d_id=20684&Tri=0 .
OriginalL'auteur Borealid
J'ai eu un problème similaire, mais le mien était sur un rechargement de la page, je voulais variables que j'avais imprimé à être détruit. C'était pour mon login pour mon web design classe, j'ai été faire une erreur de feed-back pour que si l'utilisateur a mis dans un mauvais nom d'utilisateur ou mot de passe. J'ai pu obtenir l'erreur à l'affichage, mais si j'ai frappé actualisation de la page des erreurs voudrais juste rester là. J'ai trouvé que le simple définition de la variable à rien après avoir imprimé le tuerait. Jetez un oeil à ce que j'ai fait:
Je ne sais pas si cela aide, mais il a travaillé pour moi.
Aussi, merci à vous tous qui post sur des sites de ce genre pour aider ceux d'entre nous qui sont encore en apprentissage.
OriginalL'auteur Bakerj417
Pour une page particulière, vous devrez détruire la session, puis débloquer tous les variable de session
à l'aide de
unset($_SESSION['varname']);
Pour l'ensemble du site, vous pouvez utiliser
session_destroy();
OriginalL'auteur Karthik
- Je résoudre le problème.Prenez d'abord l'url courante, puis chk la page séjour actuel de l'adresse url.si la page n'est pas dans l'url, puis à détruire la session.
Mais ce code doit être utilisé sur une autre pages.Parce que http est un apatride, de processus, de façon aucun moyen de savoir quand un utilisateur quitte la page.
$_SERVER['REQUEST_URI']
parce que c'est là le nom du fichier. Si vous avez un seul header.php fichier pour toutes les pages (comme il est de pratique courante), vous pouvez simplement utiliser ma solution, plutôt que d'ajouter du code dans toutes les pages SAUF abc.php.Il n'y a pas de point à l'aide de ce code si vous n'êtes pas aussi va le mettre sur
abc.php
. Je ne sais pas ce que cela a à voir avec http apatrides. Et vous vous avez toujours le même problème que FreekOne de réponse avec les données de session étant détruit, même lorsque vous n'êtes pas en laissantabc.php
.OriginalL'auteur riad
Vous ne pouvez pas dire quand un utilisateur navigue loin de la page, c'est tout simplement pas possible en aucune manière fiable.
Le meilleur que vous pouvez faire est d'exploiter le mode de fonctionnement des cookies. Lors du démarrage d'une session, vous êtes l'envoi d'un cookie sur le client qui identifie le client à chaque nouvelle visite, et donc active la session associée. Il appartient au client d'envoyer cette identification lors des visites ultérieures, et c'est au client de les "oublier" son identification.
Vous pouvez demander au client d'envoyer le cookie pour certaines pages, et vous pouvez demander à lui faire oublier le cookie lors de la fermeture du navigateur (avec une durée de vie de 0). Cela peut être défini à l'aide de
session_set_cookie_params
.Autre que cela, vous pouvez tout simplement ignorer les paramètres de la session sur les pages où ils n'ont pas d'importance. Vous pouvez supprimer la session (ou de certaines valeurs) après un certain temps d'inactivité lorsque vous assumer le client a gauche.
OriginalL'auteur deceze
Borealid le mérite de pointer à la solution la plus élégante.
Plus kludgey solution est de garder un iframe sur la page qui pointe vers un autre "moniteur" à la page qui est à actualiser toutes les quelques secondes. Cela peut être fait sans JavaScript à l'aide de:
Cette actualise le moniteur de la page toutes les 10 secondes. Lorsque cela se produit, la page de surveillance peut enregistrer le temps (en écrasant la saisie de l'heure) et l'ID de session sur le serveur quelque part (DB ou fichier).
Ensuite, vous devez créer un tâche cron qui vérifie que le fichier/DB pour toutes les sessions qui sont de plus de 10~12 secondes et de les supprimer manuellement. Les données de session sont généralement stockés dans un répertoire spécifié par votre config PHP) dans un fichier nommé
sess_the-session-ID
. Vous pouvez utiliser une fonction PHP comme ceci:OriginalL'auteur Lèse majesté