2017-02-03 4 views
0

est-il possible de spécifier la durée de la session sticky dans mod_cluster?Durée de la session collante

Je veux dire que la session bloquée est effacée quand il n'y a pas d'activité pendant un certain temps.

Nous avons une application distribuable qui conserve une référence à l'utilisateur connecté dans la session Web. Mais au moment de la connexion, la réplication de la session Web n'est pas assez rapide comme les demandes qui suivent la demande de connexion. Ainsi, si, pour ces demandes, l'équilibreur choisit un noeud qui n'a pas encore été répliqué, l'utilisateur ne sera pas en session et une erreur se produira.

Une autre utilisation de cette fonctionnalité serait lorsque vous utilisez des informations mises en cache sur un serveur. Si vous n'utilisez pas de session persistante, vous devrez charger plusieurs fois les mêmes informations dans des serveurs différents. Mais si vous utilisez une session persistante, vous serez lié au même serveur pendant toute la durée de la session.

Merci à l'avance

Leandro

Répondre

1

Réponse

Il est impossible de passer la session adhésivité en mod_cluster On et Off pour une certaine durée. On l'a ou non.

D'autres commentaires

IIUC, vous êtes en fait après l'expiration de la session ou infirmation de la session. Vous pouvez décider par programme d'invalider votre session à tout moment, ou vous pouvez la laisser expirer en définissant un délai d'expiration.

Pourriez-vous nous en dire plus sur la façon dont vous utiliseriez le «délai de collage de session»? Nous pourrions créer un JIRA et implémenter une nouvelle fonctionnalité si cela avait du sens ...

+0

Merci Michal, je ne veux pas annuler la session du serveur, je veux que l'équilibreur ne tient pas séance adhésivité pour toujours. Quand l'équilibreur efface-t-il la table session-serveur? – leaqui

+1

@leaqui, il n'y a pas de mappage à effacer: Balancer reçoit une requête avec JSESSIONID yoloyoloyoloyolo.worker-1 dans l'en-tête de la requête (ou dans le paramètre query de l'URL). Si les sessions persistantes sont activées, la requête est transmise à worker-1. Le nom du travailleur fait partie de JSESSIONID. TL; DR: Nous ne stockons aucune donnée de session sur l'équilibreur et nous ne stockons aucun mappage non plus - toutes les informations se trouvent dans la chaîne JSESSIONID elle-même. –

+0

Merci @ Michal, si simple. – leaqui

0

J'ai trouvé une solution pour nos besoins.

Je configure l'attribut différent de stickysession à l'équilibreur (BALANCER_SESSION_ID_HEADER_NAME) et gère la durée de la session sticker de l'équilibreur côté client.

Première fois, j'ai défini counter + JSESSIONID à BALANCER_SESSION_ID_HEADER_NAME. Chaque fois que le STICKY_SESSION_TIMEOUT est dépensé, je règle ++counter + JSESSIONID à BALANCER_SESSION_ID_HEADER_NAME.

Code client:

if (USE_STICKY_SESSION_TIMEOUT && this.getjSessionId() != null) { 
    if (this.getLastResponseTime() != 0 
     && new Date().getTime() - this.getLastResponseTime() > STICKY_SESSION_TIMEOUT) { 
    balancerSubsessionCounter++; 
    } 

    final String cookie = BALANCER_SESSION_ID_HEADER_NAME + "=" + balancerSubsessionCounter + "-" 
     + this.getjSessionId(); 
    this.addCookie(httpPost, cookie); 
} 

//invoke service 

if (USE_STICKY_SESSION_TIMEOUT) { 
    this.setLastResponseTime(new Date().getTime()); 
}