JAX-RS, RestEasy: Kein session-cookie
Leute,
Verwendet werden, dass, wenn man eine servlet/jsp-Datei, der app-server würde automatisch eine session starten. Es würde ein session-cookie in der ersten Dynamik, die verfolgt während.
Habe ich ein rest-backend und ich merke, dass keine session-cookies werden-gehandelt werden. Also habe ich manuell das hinzufügen von code zu senden, das JSESSIONID-cookie:
@Context
private HttpServletRequest httpRequest;
//...
@GET
@Path( "/{rcpGuid}" )
public Response myMethod( ... )
{
final HttpSession session = httpRequest.getSession();
final String sSessionId = session.getId();
...
return Response.status( Response.Status.SEE_OTHER ).
location( redirectUrl ).cookie( new NewCookie( "JSESSIONID", sSessionId ) );
}
Nun dadurch verursacht wird, dass 2 Exemplare des JSESSIONID cookie zurückgegeben wird, wo es vorher war kein Set-Cookie-header. Dies ist, was ich sehe nun in meinen browser-inspector:
Set-Cookie:JSESSIONID=sdm-Q1P6pRoQbKd4-9cJylGb; Path=/nn, JSESSIONID=sdm-Q1P6pRoQbKd4-9cJylGb; Version=1
Ist mir egal, wie lange das funktionieren würde. Aber leider, wenn mein browser fordert die URL umgeleitet wird, um (beachten Sie, dass die Antwort "SEE_OTHER"), dass dieser Antrag trägt nicht die session-id. Dies verursacht meine app funktionieren nicht richtig.
Irgendwelche Erkenntnisse?
- Was ist Ihre client-side-framework? Es ist möglich, dass der client ignorieren/ablehnen ist die session-id gesendet, die von Ihrem server. Ich erwähne nur diese, weil ich mit der Jersey-client-API und die Java verwendet die cookie-Mechanismus unter der Haube, die lehnt alle cookies aus der box.
- Client ist JQuery JavaScript.
- Ein REST-design ist staatenlos. Warum brauchen Sie einen cookie? 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den app-server nicht erstellen Sie eine Sitzung, bis
httpRequest.getSession()
genannt wird.In deinem Beispiel, rufen Sie
getSession()
und erstellen Sie eine separatejsessionid
cookie. Das würde erklären, warum Sie zwei cookies. Wenn Sie nicht, werden Sie nicht haben einejessionid
überhaupt.Wenn es ein REST-Backend, so dass Sie nicht haben sollte JSESSIONID cookie und halten Sie Ihre back-end-Endpunkte als Staatenlos.
Alle Informationen, die erforderlich sind, um ein Ergebnis von einem web service enthalten sein soll, die Anfrage an den web service. Ein web service ist idempotent.