2011-09-14 3 views
0

J'ai besoin de connaître les utilisateurs se connecter et se déconnecter, le problème est lorsque les délais d'expiration de la session de l'utilisateur, comment puis-je gérer cela pour mettre à jour l'application.Comment gérer la destruction de session dans Zend Framework?

Lors de la destruction de la session, je souhaite mettre à jour une table db par exemple?

Je préfère ne pas utiliser un travail cron, car il chargera beaucoup sur le serveur.

Merci d'avance.

+0

À quel point est-ce important pour vous? Il y a un mécanisme intégré en place qui fait cela, mais vous devez équilibrer les performances et avoir des informations à jour. – Jon

+0

Avoir des informations à jour est un must, en plus il est également nécessaire de laisser un seul utilisateur se connecter. – elibanon

+0

Il n'y a aucun moyen d'avoir des informations à jour sans encourir un coup de perf. C'est juste comment fonctionnent les sessions HTTP. – Jon

Répondre

0

En général, il n'y a aucun moyen de conserver des informations simultanées sur l'état de la session pour tous les utilisateurs sans subir de grandes pertes de performances. Comme vous l'avez déjà dit, ceci est dû au fait que vous ne pouvez pas terminer une session correctement une fois.

À ce stade, vous avez deux options:

1. Lancez un travail cron (déterministe)

Vous pouvez configurer une tâche cron pour exécuter aussi souvent que vous avez besoin. Cela garantira que l'information que vous avez est au plus aussi vieille que l'intervalle cron.

2. Régler la session GC probabilité

Réglage des session.gc_probability et session.gc_divisor options de PHP vous permet de spécifier une probabilité avec laquelle le nettoyage de la session sera lancé à chaque demande. Généralement, il s'agit d'une valeur relativement faible (par exemple, 1/100) car, à des charges de serveur très élevées, il peut tuer votre performance très rapidement.

Les avantages de cette approche sont qu'elle est intégrée et qu'elle ne vous coûte rien si votre serveur n'est pas réellement touché par les utilisateurs.

Le principal inconvénient est que la probabilité doit toujours être ajustée en tenant compte du nombre de requêtes/s sur votre serveur, ce qui n'est pas une constante. D'autres inconvénients sont le fait qu'il dépend des requêtes pour fonctionner réellement (ne nettoiera jamais les sessions si personne ne visite votre serveur) et que c'est un paramètre global (fonctionne sur l'ensemble du serveur, pas sur l'ensemble de l'application).

+0

Tout d'abord merci pour votre réponse, comme pour la session GC, puis-je gérer la destruction de la session, que je veux mettre à jour une table db par exemple? – elibanon

+0

@elibanon: Oui, ['session_set_save_handler'] (http://www.php.net/manual/en/function.session-set-save-handler.php) vous permet de le faire. Mais n'y allez pas tout de suite, il est certain à 100% que ZF le fait déjà. Vous ne savez pas comment vous connecter au gestionnaire de session de ZF, ne l'avez pas utilisé. – Jon

+0

J'ai utilisé cette interface Zend_Session_SaveHandler_Interface, et fonctionne très bien. – elibanon

Questions connexes