2010-12-07 33 views
4

est la valeur retournée par HttpSession.getId() garantie à être unique dans le temps - ou seulement unique parmi toutes les sessions actives?Quelle est l'unique HttpSession.getId()?

En d'autres termes, je peux l'utiliser comme une clé pour une entrée de journal de session (quel utilisateur connecté quand et pour combien de temps)?

Si getId est spécifique à l'implémentation (ce que j'imagine, car la spécification J2EE est silencieuse sur ce problème), comment est-elle traitée sur Google App Engine?

Répondre

3

Pour autant que je sache, les ID de session ne sont uniques aussi longtemps que vous ne l'avez pas redémarré le serveur Web. L'ID de session est donc unique au cours du cycle de vie de votre serveur Web.

Dans Apache Tomcat, vous pouvez consulter ManagerBase.generateSessionId() pour savoir comment l'ID est généré. Mais attention dans Tomcat les ID générés ne sont uniques que dans le même contexte.

espoir qui a aidé

+0

La question concerne Google App Engine. GAE est basé sur Jetty pas Tomcat. Dans GAE, la session est distribuée et persistée dans la base de données et reste après le redémarrage du serveur. – zacheusz

2

Oui, il dépend de la implementation. Comme pour n'importe quelle méthode dans n'importe quelle interface :-). C'est au programmeur de s'assurer que l'identifiant est unique.

Si vous utilisez ManagerBase.createSession(java.lang.String) en combinaison avec UUID vous êtes 100% sûr que votre identifiant sera unique.

+0

La question concerne Google App Engine. GAE est basé sur Jetty pas Tomcat. Dans GAE, la session est distribuée et persistée dans la base de données et reste après le redémarrage du serveur. – zacheusz

1

La question est sur Google App Engine. GAE est basé sur Jetty et non sur Tomcat. Vous ne pouvez pas utiliser ManagerBase.createSession (java.lang.String). La session est distribuée et persistée dans Datastore (ou memcached). Il est suivi au moyen d'un cookie (appelé JSESSONID), qui est géré par le conteneur de servlets. Dans Datastore, il y a des entités de type _ah_SESSION avec id qui est l'identifiant de session préfixé par "_ahs". Actuellement, les entités _ah_SESSION ne sont pas supprimées automatiquement. Donc, la réponse est: actuellement id de session sur GAE est unique dans le temps.