2009-09-05 19 views
8

Presupponendo sto rotolando il mio codice di sessione, qual è il modo giusto per generare un cookie di sessione ID univoco e sicuro in java.id di sessione cookie nel GWT RPC

non dovrei essere a rotazione mia, ma con qualcosa che è già stato standardizzato?

sto usando GWT e la piattaforma di app-motore di Google.

Come faccio sessioni persistono i riavvii del browser/server?

+0

È possibile utilizzare la sessione su Google App Engine. Ho fornito il link nella risposta aggiornata. –

+0

Come posso mantenere le sessioni persistenti durante i riavvii del browser/server? –

+0

Un modo per mantenere le sessioni persistenti durante i riavvii consiste nel fare in modo che le sessioni siano supportate da un archivio file o database. Questo è il modo in cui i meccanismi di failover delle sessioni funzionano nella maggior parte dei server delle applicazioni. Ma mi chiedo perché ne hai la necessità in Google App Engine. –

risposta

24

Using Servlet Sessions in GWT

nella classe di implementazione servizio remoto:

String jSessionId=this.getThreadLocalRequest().getSession().getId(); 

nel codice client:

String jSessionId=Cookies.getCookie("JSESSIONID"); 

Enabling_Sessions

AppEngine-web.xml

<sessions-enabled>true</sessions-enabled> 
2

No, non dovresti rotolare da solo.

l'id di sessione deve essere crittograficamente casuale (non da indovinare da fonti note). È difficile farlo da solo.

1

Idealmente si dovrebbe affidamento su funzioni di gestione sessione del quadro sottostante. Servlet & JSP, Struts e Spring hanno questo supporto, che dovresti usare.

Nel caso estremamente raro in cui si sta scrivendo il proprio framework senza le funzioni di gestione delle sessioni sottostanti su cui fare affidamento, è possibile iniziare con la classe java.security.SecureRandom per iniziare. Ovviamente, non reinventare la ruota qui, perché la gestione della sessione interrotta è la stessa dell'autenticazione non funzionante.

Aggiornamento

Dato che si sta utilizzando Google App Engine, si dovrebbe fare affidamento sulle funzionalità di gestione delle sessioni previste dal motore. It seems that it is not switched on by default.

+1

Gestione della sessione fa parte di J2EE specifiche e viene implementata dal contenitore app Server/servlet. Quindi, a meno che "scrivere il proprio framework" significhi "scrivere il codice sopra il protocollo HTTP non elaborato" si deve sempre fare affidamento sulla gestione delle sessioni. – ChssPly76

+0

Sì, è vero. –

+0

A proposito, Axis 1.x implementa la gestione delle sessioni utilizzando la classe SecureRandom. Non sono sicuro sul motivo per cui l'hanno scelto, ma questo è l'unico caso unico che ho incontrato. –