Dies ist die alte 4D Dokumentations-Website. Die neue und aktualisierte Dokumentation finden Sie unter developer.4d.com

Home

 
4D v20 R7
Web Sessions verwalten (Legacy)

Web Sessions verwalten (Legacy)  


 

Diese Seite beschreibt legacy (alte) Web Sessions, die in konvertierten 4D Anwendungen auftreten (siehe ).

Wir empfehlen ab 4D v18 R6, skalierbare Web Sessions einzusetzen. Sie können skalierbare Sessions in Ihren konvertierten Anwendungen aktivieren. Dazu wählen Sie die Option webServer.start() in den Einstellungen oder den Befehl WEB SET OPTION.

Weitere Informationen dazu finden Sie unter User sessions on developer.4d.com.

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, ob das 4DSID Cookie vorhanden ist und seinen Wert:

  • 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 oder ist nicht vorhanden (z.B. weil es abgelaufen ist), erstellt 4D einen neuen Kontext.

In konvertierten Anwendungen werden Legacy Web Sessions auf folgende Weise aktiviert: 

  • Auf der Seite "Optionen (I)" der Struktur Einstellungen (dauerhafte Einstellung) ist die Option Legacy Sessions markiert:

     

  • Die Anweisung WEB SET OPTION(Web legacy session;1) ausführen.

Wir empfehlen, sobald wie möglich, Skalierbare Sessions zu aktivieren. 

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 Legacy Close Process 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 QR SET DESTINATION laden (siehe Beispiel unten).

Falls erforderlich, können Sie über den Befehl WEB LEGACY 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 Legacy Close Process 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 QR SET DESTINATION und die Datenbankmethode On Web Legacy Close Process verwalten können. 

Der Code der QR SET DESTINATION 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 Legacy Close Process :

  // 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.



Siehe auch 

_O_WEB Get session process count
Datenbankmethode On Web Legacy Close Process
Datenbankmethode On Web Legacy Close Session
WEB Get Current Session ID
WEB LEGACY CLOSE SESSION
WEB LEGACY GET SESSION EXPIRATION

 
EIGENSCHAFTEN 

Produkt: 4D
Thema: Web Server

 
SEITENINHALT 
 
GESCHICHTE 

Geändert: 4D v18 R6

 
ARTIKELVERWENDUNG

4D Programmiersprache ( 4D v20 R7)