2009-08-25 7 views
11

J'utilise la fonction de connexion sur mon site avec session. Cette session expire après quelques minutes, quel que soit l'utilisateur déconnecté ou non. Maintenant, ce que je veux, c'est que la session ne doit expirer quand un utilisateur se déconnecte.Si un utilisateur ne se déconnecte pas de son compte, puis revient après 2-3 jours même alors il devrait apparaître connecté.La session ne devrait jamais expirer par elle-même

J'ai J'ai trouvé quelques exemples où ils ont prolongé le temps d'expiration d'une session, mais je veux que cela ne prenne fin que sur l'événement de déconnexion par l'utilisateur, quel que soit le temps qu'il a pris pour se déconnecter.

comment puis-je faire ça ??

Edit:

session_cache_expire(0); 
session_start(); 

est-ce la façon d'écrire de le faire?

Répondre

24

Une solution qui est souvent utilisé, dans cette situation, est de:

  • ont une durée de la session pas trop long: il expirera si l'utilisateur n'est pas actif (c'est juste la façon dont cela fonctionne - et c'est mieux pour votre serveur si vous avez beaucoup d'utilisateurs)
  • Lorsque l'utilisateur se connecte, vous définissez un cookie qui contient ce dont il a besoin pour être reconnu
  • s'il revient sur le site (avec le cookie, et sans avoir de session active), vous utilisez les informations contenues dans ce cookie pour vous connecter automatiquement, en recréant la session en même temps.

De cette façon:

  • vous n'avez pas des milliers de sessions "actifs" sans bonne raison
  • vous gardez les sessions de manière standard fonctionnent

Et vous avez la l'avantage de «ne jamais être éliminé», du moins du point de vue de l'utilisateur. Notez également qu'avec les sessions "normales", le cookie contenant l'identifiant de session sera supprimé lorsque l'utilisateur fermera son navigateur. Il sera donc déconnecté, quelle que soit la durée de vie de la session.
Avec la solution que je propose, vous êtes celui qui met en place depuis combien de temps le cookie doit rester sur l'ordinateur de l'utilisateur ;-)


Cela signifie, cependant, que lorsqu'un utilisateur se déconnecte manuellement, vous avez pour supprimer à la fois sa session et le cookie, bien sûr - il n'est donc pas re-connecté automatiquement.


Bien sûr, vous devez faire attention à ce que vous définissez dans le cookie: un cookie est pas tout à fait sûr, il ne faut pas stocker un mot de passe en elle, par exemple ;-)


En fait, cette façon de faire est de savoir comment la fonction «se souvenir de moi» fonctionne souvent; sauf, ici, vos utilisateurs n'auront pas à cocher une case pour activer "se souvenir de moi" ;-)


Si vous n'avez pas le temps de développer ce genre de choses, un moyen rapide et sale est pour utiliser une requête Ajax sur toutes vos pages, cela ne fera que "pinguer" une page PHP sur le serveur - cela gardera la session active (mais ce n'est pas une bonne façon de faire les choses: vous aurez encore BEAUCOUP de sessions sur le serveur, vous aurez beaucoup de demandes inutiles ... et cela ne fonctionnera que tant que l'utilisateur ne ferme pas son navigateur).

+0

i ont mis un cookie avec le nom d'utilisateur et un nombre aléatoire concaténé, puis Je l'ai stocké dans la base de données. Quand une page est appelée, je vérifie le cookie du système et le compare avec celui de la base de données si les deux correspondances puis j'affiche la personne comme connectée sinon. Et quand une personne se déconnecte j'ai mis le cookie à null. Est-ce la bonne façon ??? et est-ce sécurisé? – developer

+0

Semble OK pour moi, au moins - ce ne sera jamais "la sécurité parfaite", comme toute personne utilisant l'ordinateur du gars sera automatiquement connecté, mais cela devrait suffire, je suppose :-) –

+0

ya je comprends la sécurité problème. Merci Martin :-) – developer

0

Retirez-vous vos cookies pendant les tests? Les cookies sont-ils activés? Détournez-vous la session quelque part dans votre code?

En outre, voir ma réponse à un autre article: Quick question about sessions in PHP qui explique comment rester connecté. Il suffit de ne pas faire une tâche cronjob/sheduled si vous voulez que l'utilisateur reste connecté pour toujours.

2

Vous ne pouvez pas faire cela avec la gestion de session interne PHP seul. PHP enverra toujours l'identifiant de session dans un cookie de session qui expirera lorsque l'utilisateur fermera son navigateur. Pour réaliser une sorte de connexion automatique, vous aurez besoin d'un code d'accompagnement qui définit un cookie plus durable sur le navigateur de l'utilisateur et gère la reconnaissance de ces cookies et le mappage entre la valeur des cookies et le compte utilisateur respectif.

Veuillez noter que cela affecte grandement les problèmes de sécurité, vous devrez donc prendre soin de beaucoup de choses. S'il vous plaît lire ce qui suit sur la façon dont une caractéristique possible de connexion automatique pourrait travailler: