2017-02-03 6 views
0

ist es möglich, die Dauer der Sticky Session in mod_cluster anzugeben?Sticky Session Dauer

Ich meine, dass die festsitzende Sitzung gelöscht wird, wenn es für einen Zeitraum keine Aktivität gibt.

Wir haben eine verteilbare Anwendung, die einen Verweis auf den angemeldeten Benutzer in der Web-Sitzung behält. Zum Zeitpunkt der Anmeldung ist die Replikation der Websitzung jedoch nicht schnell genug, da die Anfrage nach der Anmeldeanforderung erfolgt. Wenn der Balancer für diese Anforderungen einen Knoten auswählt, der noch nicht repliziert wurde, ist der Benutzer nicht in der Sitzung und ein Fehler tritt auf.

Eine andere Verwendung dieser Funktionalität wäre, wenn Sie zwischengespeicherte Informationen auf einem Server verwenden. Wenn Sie keine sticky-Sitzung verwenden, laden Sie mehrere gleiche Informationen auf verschiedenen Servern. Wenn Sie jedoch eine sticky-Sitzung verwenden, sind Sie für die gesamte Lebensdauer der Sitzung an denselben Server gebunden.

Vielen Dank im Voraus

Leandro

Antwort

1

Antwort

Es ist nicht möglich Sitzung Klebrigkeit in mod_cluster Ein und Aus für eine bestimmte Zeitdauer zu wechseln. Man hat es entweder an oder aus.

Weitere Kommentare

IIUC, Sie sind in der Tat nach Sitzungsablauf oder Sitzung Entwertung. Sie können Ihre Sitzung zu einem beliebigen Zeitpunkt programmatisch für ungültig erklären, oder Sie können sie ablaufen lassen, indem Sie das Ablaufzeitlimit festlegen.

Können Sie vielleicht mehr darüber ausarbeiten, wie Sie das "Session Stickiness Timeout" verwenden würden? Wir könnten ein JIRA erstellen und ein neues Feature implementieren, wenn es Sinn macht ...

+0

Dank Michal, ich will nicht Server-Sitzung ungültig zu machen, möchte ich, dass die Auswuchtmaschine nicht Sitzung Klebrigkeit nicht für immer halten. Wann löscht der Balancer die Session-Server-Tabelle? – leaqui

+1

@leaqui, es gibt kein solches Mapping, das jemals gelöscht werden kann: Balancer empfängt eine Anforderung mit JSESSIONID yoloyoloyoloyolo.worker-1 im Anforderungsheader (oder im Abfrageparameter der URL). Wenn sticky-Sitzungen aktiviert sind, wird die Anforderung an worker-1 übergeben. Der Name des Arbeiters ist ein Teil der JSESSIONID. TL; DR: Wir speichern keine Sitzungsdaten auf dem Balancer, und wir speichern auch keine Zuordnung - alle Informationen sind in der Zeichenfolge JSESSIONID enthalten. –

+0

Dank @michal, so einfach. – leaqui

0

Ich habe einen Workaround für unsere Bedürfnisse gefunden.

Ich konfiguriere verschiedene Stickysession Attribut am Balancer (BALANCER_SESSION_ID_HEADER_NAME) und verwalten klebrige Sitzung Dauer Balancierer auf Client-Seite.

Zum ersten Mal setze ich counter + JSESSIONID auf BALANCER_SESSION_ID_HEADER_NAME. Jedes Mal, wenn STICKY_SESSION_TIMEOUT ausgegeben wird, setze ich ++counter + JSESSIONID auf BALANCER_SESSION_ID_HEADER_NAME.

Client-Code:

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()); 
}