4D v14.3

Web Sessions verwalten

Home

 
4D v14.3
Web Sessions verwalten

Web Sessions verwalten  


 

 

Der 4D Web Server bietet eine einfache und komplette Art zum Verwalten von Benutzersitzungen. Dieser automatische Mechanismus ermöglicht aufeinanderfolgenden Web Clients, von einer Anfrage zur nächsten denselben Kontext (Auswahlen und Variableninstanzen) erneut zu verwenden.

Das wird über ein privates Cookie ausgeführt, das 4D selbst setzt: "4DSID". Bei jeder Anfrage des Web Client prüft 4D den Wert des 4DSID Cookie:

  • Hat das Cookie einen Wert, versucht 4D den Kontext zu finden, der dieses Cookie innerhalb der bestehenden Kontexte angelegt hat.
    • Wird der Kontext gefunden, wird er erneut für den Aufruf verwendet; die Methode Compiler_Web wird nicht ausgeführt
    • Wird kein Kontext gefunden, erstellt 4D einen neuen.
  • Hat das Cookie keinen Wert, erstellt 4D einen neuen Kontext.

Damit Sie die automatische Session-Verwaltung in Ihrer Applikation verwenden können, müssen Sie diese in Ihrem 4D Web Server aktivieren.

Diese Funktionsweise wird in Anwendungen, die mit 4D v13 oder höher erstellt werden, automatisch aktiviert.
Zur Wahrung der Kompatibilität wird sie jedoch in Anwendungen, die aus früheren 4D Versionen konvertiert wurden, deaktiviert. Sie müssen sie explizit aktivieren, damit Sie die Vorteile der automatischen Verwaltung nutzen können. 

Dafür gibt es zwei Möglichkeiten:

  • Sie aktivieren die Option "Automatische Session-Verwaltung" unter Datenbank-Eigenschaften>Optionen (I):


    In diesem Fall ist die Einstellung permanent, sie wird auf der Festplatte gesichert.
  • Über die Konstante Web Keep session des Befehls WEB SET OPTION. In diesem Fall gilt die Einstellung nur für die Session und überschreibt die Einstellung, die in den Datenbank-Eigenschaften definiert wurde.

In beiden Fällen gilt die Einstellung lokal für den Rechner; sie kann also auf den Web Server in 4D Server anders sein als auf Rechnern mit remote 4D.

Die Lebensdauer eines inaktiven Cookie beträgt standardmäßig 8 Stunden (480 Minuten), das lässt sich aber über den Befehl WEB SET OPTION verändern. Sie können eine andere Lebensdauer für Cookies (Option Web Inactive session timeout) in Prozessen festlegen, die mit Server Sessions verbunden sind (Option Web Inactive process timeout): Sie wollen z.B. für einen Warenkorb definieren, dass er 24 Stunden gültig bleibt. Aus Optimierungsgründen wollen Sie diesen Prozess jedoch nicht so lange beibehalten. Dafür können Sie z.B. eine Prozesslebensdauer von 4 Stunden festlegen. Am Ende dieser Zeitspanne wird die Datenbankmethode On Web Session Suspend aufgerufen und Sie können die Variablen und Auswahlen dieser Session speichern, bevor der Prozess gestoppt wird. Meldet sich der Web Client das nächste Mal an (bis zu 24 Stunden später), wird das Cookie an den Server zurückgesendet und Sie können die Informationen zur Session erneut in der Datenbankmethode On Web Connection laden (siehe Beispiel unten).

Falls erforderlich, können Sie über den Befehl WEB CLOSE SESSION jederzeit das Cookie beenden und so die Arbeitssitzung schließen.

4D löscht automatisch den ältesten inaktiven Kontext, wenn die maximale Anzahl der beibehaltenen Kontexte erreicht ist. Standardmäßig ist die Nummer 100 festgelegt. Sie lässt sich über den Befehl WEB SET OPTION verändern.
Wird ein Kontext gerade gelöscht, d.h. der zugeordnete Web Prozess wird geschlossen, wird die Datenbankmethode On Web Session Suspend aufgerufen, so dass sie die Variablen und Auswahlen dieses Kontexts zur späteren Wiederverwendung sichern können.

Dieses Beispiel zeigt, wie einfach Sie Sessions über die Datenbankmethode On Web Connection und die Datenbankmethode On Web Session Suspend verwalten können. 

Der Code der Datenbankmethode On Web Connection lautet:

  // On Web Connection (oder On Web Authentication)
 C_TEXT(www_SessionID)
 If(www_SessionID=WEB Get Current Session ID)
  // Compiler_Web wird nicht aufgerufen
  // Alle Variablen und Auswahlen sind bereits vorhanden
    ...
 Else
  // Compiler_Web wurde gerade ausgeführt
  // Dies ist eine neue Session, es gibt keine Variable oder Auswahl
  // Sich die Session merken, die 4D gerade angelegt hat
    www_SessionID:=WEB Get Current Session ID
 
  // Initialisieren der Sitzung
  // Setup Auswahlen
  // Suche angemeldete Benutzer
    QUERY([User];[User]Login=www_Login)
    QUERY([prefs];[prefs]Login=www_Login)
 
  // Suche Angaben des Mitarbeiters
    QUERY([employees];[employees]Name=[user]name)
    QUERY([company];[company]Name=[user]company)
 
  // Setup Variablen
  // Erhalte prefs für diesen Benutzer
    SELECTION TO ARRAY([prefs]name;prefNames;[prefs]values;prefValues)
    www_UserName:=[User]name
    www_UserMail:=[User]mail
 
  // Die Session ist jetzt initialisiert
 End if

Code für Datenbankmethode On Web Session Suspend :

  // On Web Session Suspend
  // Nach einer Periode ohne Aktivität oder bei Notwendigkeit schließt 4D die Session
 C_TEXT(www_SessionID)
 www_SessionID:=""
  // Wir speichern die Session Info
  // Wir sichern die Einstellungen des zuvor angemeldeten Benutzers
 QUERY([prefs];[prefs]Login=www_Login) // In der Session beibehalten
 ARRAY TO SELECTION(prefNames;[prefs]name;prefValues;[prefs]values)
 
  // Wichtig: Der Prozess wird dann gestoppt
  // 4D löscht die Variablen, Auswahlen, etc.

Da die Mechanismen der Session-Verwaltung auf Cookies basiert, kann der HTTP Server von 4D eine Session nicht aufrechterhalten, wenn der Web Client keine Cookies akzeptiert. In diesem Fall wird jede Anfrage als neue Anmeldung gewertet und die Methode Compiler_Web wird jedes Mal ausgeführt. 

Über den Befehl WEB GET HTTP HEADER können Sie prüfen, ob Cookies unterstützt werden.

Der 4D HTTP Server merkt sich die IP, welche die Session gestartet hat. Versucht eine andere IP auf eine bestehende Session zuzugreifen, wird der generische Status 400 Client Fehler zurückgegeben.

 
EIGENSCHAFTEN 

Produkt: 4D
Thema: Web Server

 
SIEHE AUCH 

Datenbankmethode On Web Session Suspend
Datenbankmethode On Web Session Suspend
WEB CLOSE SESSION
WEB Get Current Session ID
WEB GET SESSION EXPIRATION

 
ARTIKELVERWENDUNG

4D Programmiersprache ( 4D v14 R2)
4D Programmiersprache ( 4D v14 R3)
4D Programmiersprache ( 4D v13.5)
4D Programmiersprache ( 4D v14.3)
4D Programmiersprache ( 4D v14 R4)