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