2012-07-09 14 views
6

Sto cercando di determinare come recuperare le informazioni sulla sessione utilizzando un server Delphi REST DataSnap.Delphi XE2 Datasnap Session Management: informazioni sulla sessione dopo il caricamento della pagina

So che, quando sulla stessa pagina client, si ha accesso alla sessione thread corrente utilizzando il metodo TDSSession GetThreadSession.

Quello che voglio fare, tuttavia, è memorizzare i dati nella sessione (putData) ed essere ancora in grado di recuperarli quando l'utente si sposta da page1 a pagina2. Al momento, se l'utente si sposta su una pagina diversa, la sessione viene persa e ne viene creata una nuova, perdendo così i dati nella sessione che avevo precedentemente impostato.

Ho provato a giocare con TDSSessionManager.SetThreadSession (sessionid) - ma non riesco a farlo funzionare.

Ho esaminato il tanto acclamato white paper di Marco Cantu, tuttavia, non fornisce una soluzione a questo problema.

Qualsiasi aiuto che posso ottenere su questo sarebbe fantastico - anche se è solo "hey, questo argomento è trattato nel libro X".

Grazie!

risposta

0

Credo che ciò che è necessario fare è impostare la proprietà LifeCycle dell'istanza TDSServerClass su Session (stateful). Dalla tua domanda sembra che tu stia attualmente utilizzando Invocation (senza stato).

+0

Scuse: sarebbe stata un'informazione utile fornita inizialmente. TDSServerClass ha la sua proprietà LifeCycle attualmente impostata su Session. – ConBran

+0

Penso che questo dovrebbe funzionare fuori dalla scatola se la connessione HTTP 1.1 KeepAlive è in vigore. –

+1

Fuori dalla scatola, le applicazioni REST utilizzano TIdHTTPWebBrokerBridge come server. Per impostazione predefinita, la proprietà KeepAlive è 'false', quindi, seguendo il tuo suggerimento, all'avvio del server, sto impostando la proprietà KeepAlive su 'true', tuttavia il problema persiste purtroppo. – ConBran

1

TDSSessionManager.SetThreadSession (sessionid) funziona con Session.sessionname.

Inoltre, assicurarsi che il ciclo di vita sia impostato su Sessione (come indicato da tondrej).

Se si riconnette il client. una nuova sessione è iniziata. Quindi vuoi mantenere aperta la tua connessione Datasnap.

Oppure è possibile impostare il ciclo di vita su Server e gestire personalmente le sessioni client.

Modifica: I server rest sono stateless. Quindi è necessario memorizzare la pagina visualizzata sul client. E interrogare la pagina necessaria dal server

1

È necessario modificare il codice JavaScript del client per utilizzare un cookie per memorizzare le informazioni sulla sessione.

vedere l'ultima parte di JavaScript Client Sessions

Se si desidera mantenere oggetti lato server attivo per la sessione utilizza il ciclo di vita della sessione.

+0

Per ricordare l'ID sessione tra i carichi di pagina, è necessario abilitare il cookie di sessione. Per fare ciò, ad esempio, chiamare: initSessionData (true, "chat_"); –