2012-07-09 12 views
6

Ich versuche herauszufinden, wie Sitzungsinformationen mithilfe eines Delphi REST DataSnap-Servers abgerufen werden.Delphi XE2 Datasnap Sitzungsverwaltung - Abrufen von Sitzungsinformationen nach dem erneuten Laden der Seite

Ich weiß, dass Sie auf der gleichen Client-Seite Zugriff auf die aktuelle Thread-Sitzung haben, die die GetShreadSession -TDSSession-Methode verwendet.

Was ich jedoch tun möchte, ist speichern Daten in der Sitzung (PutData) und immer noch in der Lage, es abzurufen, wenn der Benutzer von Seite1 zu Seite2 bewegt. Wenn der Benutzer derzeit auf eine andere Seite wechselt, geht die Sitzung verloren und es wird eine neue Sitzung erstellt, wodurch die Daten in der Sitzung verloren gehen, die ich zuvor eingerichtet habe.

Ich habe versucht, mit TDSSessionManager.SetThreadSession (SessionID) zu spielen - aber ich kann nicht scheinen, es funktioniert.

Ich habe das viel gelobte Marco Cantu Whitepaper gelesen, es bietet jedoch keine Lösung für dieses Problem.

Jede Hilfe, die ich bekommen kann, wäre großartig - auch wenn es nur "hey, dieses Thema ist in Buch X abgedeckt".

Danke!

Antwort

0

Ich glaube, was Sie tun müssen, ist LifeCycle Eigenschaft Ihrer TDSServerClass Instanz auf Session (Stateful). Aus Ihrer Frage scheint es, dass Sie derzeit Invocation (zustandslos) verwenden.

+0

Entschuldigung - das wäre hilfreiche Informationen gewesen, die ursprünglich zur Verfügung gestellt wurden. Die LifeCycle-Eigenschaft der TDSServerClass ist derzeit auf Sitzung festgelegt. – ConBran

+0

Ich denke, das sollte out-of-the-Box funktionieren, wenn HTTP 1.1 KeepAlive Verbindung in Kraft ist. –

+1

Standardmäßig verwenden die REST-Anwendungen TIdHTTPWebBrokerBridge als Server. Standardmäßig ist die KeepAlive-Eigenschaft 'false'. Wenn Sie also Ihrem Vorschlag folgen und beim Starten des Servers die KeepAlive-Eigenschaft auf 'true' setzen, bleibt das Problem leider bestehen. – ConBran

1

Die TDSSessionManager.SetThreadSession (Sitzungs-ID) funktioniert mit Session.sessionname.

Plus stellen Sie sicher, dass Ihr Lifecycle auf Sitzung eingestellt ist (wie von tondrej angegeben).

Wenn Sie Ihren Client erneut verbinden. Eine neue Sitzung wird gestartet. Sie möchten also Ihre Datasnap-Verbindung offen halten.

Oder Sie können den Lebenszyklus auf Server setzen und die Client-Sitzungen selbst verwalten.

Bearbeiten: Rest-Server sind zustandslos. Sie müssen also die Seite, auf der Sie sich befinden, auf dem Client speichern. Und fragen Sie die benötigte Seite vom Server ab

1

Sie müssen das clientseitige JavaScript optimieren, um ein Cookie zum Speichern von Sitzungsinformationen zu verwenden.

Siehe den letzten Teil des JavaScript Client Sessions

Wenn Sie Server-Seite für die Sitzung des Session-Lebenszyklus verwenden aktive Objekte behalten möchten.

+0

Um sich die Sitzungs-ID zwischen dem Laden der Seite zu merken, müssen Sie den Sitzungscookie aktivieren. Rufen Sie dazu zum Beispiel: initSessionData (true, "chat_"); –

Verwandte Themen