2009-09-05 3 views
8

Angenommen, ich rolle meinen eigenen Sitzungscode, was ist der richtige Weg, um eine eindeutige und sichere Session-ID-Cookie in Java zu generieren.Sitzungs-ID-Cookie in gwt rpc

Soll ich nicht selbst rollen, sondern etwas verwenden, das bereits standardisiert ist?

Ich benutze gwt und die Google App-Engine-Plattform.

Wie führe ich Sitzungen über Neustarts von Browsern/Servern fort?

+0

Sie können die Sitzung auf der Google App Engine verwenden. Ich habe den Link in der aktualisierten Antwort angegeben. –

+0

Wie führe ich Sitzungen über Neustarts von Browsern/Servern hinweg fort? –

+0

Eine Möglichkeit, um Sitzungen bei Neustarts beibehalten zu können, besteht darin, dass Sitzungen durch einen Dateispeicher oder eine Datenbank gesichert werden. Auf diese Weise funktionieren Sitzungs-Failover-Mechanismen in den meisten Anwendungsservern. Aber ich frage mich, warum Sie das in Google App Engine brauchen. –

Antwort

24

Using Servlet Sessions in GWT

In der Remote-Service-Implementierungsklasse:

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

Im Client-Code:

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

Enabling_Sessions

appengine-web.xml

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

Nein, Sie sollten nicht Ihre eigenen rollen.

Die Sitzungs-ID muss kryptographisch zufällig sein (nicht aus bekannten Quellen zu erraten). Es ist schwierig, das selbst richtig zu machen.

1

Idealerweise sollten Sie sich auf die Sitzungsverwaltungsfunktionen des zugrunde liegenden Frameworks verlassen. Servlets & JSPs, Struts und Spring haben diese Unterstützung, die Sie verwenden sollten.

In dem extrem seltenen Fall, dass Sie ein eigenes Framework ohne zugrunde liegende Sitzungsverwaltungsfunktionen schreiben, können Sie mit der Klasse java.security.SecureRandom beginnen. Natürlich, erfinden Sie das Rad hier nicht neu, denn eine unterbrochene Sitzungsverwaltung ist dasselbe wie eine fehlerhafte Authentifizierung.

aktualisieren

Vorausgesetzt, dass Sie Google App Engine verwenden, sollten Sie sich auf die Session-Management-Funktionen durch den Motor stützen. It seems that it is not switched on by default.

+1

Sitzungsverwaltung ist Teil der J2EE-Spezifikation und wird von App Server/Servlet-Container implementiert. Wenn Sie also nicht Ihr eigenes Framework schreiben, bedeutet "Code über das rohe HTTP-Protokoll schreiben", auf das Sie sich immer verlassen können. – ChssPly76

+0

Ja, das stimmt. –

+0

Axis 1.x implementiert übrigens die Sitzungsverwaltung mit der SecureRandom-Klasse. Ich bin mir nicht sicher, warum sie es gewählt haben, aber dies ist der einzige Fall, den ich je gesehen habe. –

Verwandte Themen