Java 如何在gwt客户端应用程序和google应用程序引擎服务器中同步Cookie

Java 如何在gwt客户端应用程序和google应用程序引擎服务器中同步Cookie,java,google-app-engine,gwt,Java,Google App Engine,Gwt,我为web开发了gwt客户端应用程序,并使用GoogleAppEngine作为服务器 我用java编写服务器 我使用RequestBuilder将请求发送到服务器 如何在服务器和客户端之间同步cookies。 客户端向服务器发送的每个请求服务器都会创建新会话 我想避免它 在服务器中,我在每个请求中都编写这样的代码 private void addCookies(){ String jsessionId = request.getParameter("JSESSIONID"); i

我为web开发了gwt客户端应用程序,并使用GoogleAppEngine作为服务器 我用java编写服务器 我使用RequestBuilder将请求发送到服务器 如何在服务器和客户端之间同步cookies。 客户端向服务器发送的每个请求服务器都会创建新会话 我想避免它
在服务器中,我在每个请求中都编写这样的代码

private void addCookies(){
    String jsessionId = request.getParameter("JSESSIONID");
    if (jsessionId != null && !jsessionId.isEmpty()) {
        Cookie userCookie = new Cookie("JSESSIONID", jsessionId);
        response.addCookie(userCookie);
    } else {
        String sessionId = request.getSession().getId();
        Cookie userCookie = new Cookie("JSESSIONID", sessionId);
        response.addCookie(userCookie);
    }
}
因此,对于第一个请求,我使用sessionId创建了cookie,并将会话id返回给客户机作为响应

在客户端中,我编写的代码如下

public void setSessionId(String sessionId) {
    Cookies.setCookie(JSESSIONID,  sessionId);
}
public void sendRequest(final BaseRequest baseReuest){
    long currentTime = getApplicationServices().getTimeManager().getCurrentDate().getTime();
    if(isSessionIdle()){
        getBaseClientFactory().restart(true);
        return;
    }
    if(baseReuest.getOptionsRequest().isShowLoader()){
        showLoader(true);
        loaderRequestsCounter++;
    }
    try {
        String url = baseUrl + baseReuest.getMethodName();
        RequestBuilder requestBuilder = new RequestBuilder(RequestBuilder.POST, url);
        requestBuilder.setHeader("Content-type", "application/x-www-form-urlencoded");
        baseReuest.addParam(JSESSIONID, getSessionId());
        requestBuilder.sendRequest(baseReuest.getParamsAsString(), new RequestCallback() {

            @Override
            public void onResponseReceived(Request request, Response response) {
                requestFinish(baseReuest);
                int status = response.getStatusCode();
                if(status == 200){
                    String json = response.getText();
                    BaseRequestResponse baseRequestResponse = baseReuest.buildResponse(json);
                    if(!baseRequestResponse.isSuccess()){
                        showFailureMessage(baseRequestResponse.getFailureResponse());
                    }
                    baseReuest.notifyResponse(baseRequestResponse);
                }
                else{
                    onErrorResponse();
                }
            }

            @Override
            public void onError(Request request, Throwable exception) {
                onErrorResponse();
            }
            private void onErrorResponse(){
                requestFinish(baseReuest);
                String message = getLabels().getLabel(IGeneralInfoLabels.THERE_IS_PROBLEM_ACCESSING_THE_SERVER);
                if(!isOnline()){
                    message = getApplicationServices().getGeneralManager().getLocalLabel().connectionNotAvailable();
                }
                FailureResponse failureResponse = new FailureResponse(message);
                showFailureMessage(failureResponse);
                baseReuest.notifyFailureResponse(failureResponse);
            }
            private void showFailureMessage(FailureResponse failureResponse){
                if(baseReuest.getOptionsRequest().isShowMessage()){
                    BaseRequestManager.this.showFailureMessage(failureResponse);
                }
            }
        });
        lastRequestSentTime = currentTime;
    } catch (RequestException e) {
        showLoader(false);
        requestFinish(baseReuest);
    }
}
我从服务器获取sessionId并添加到cookie中

当我用RequestBuilder发送请求时,如下所示

public void setSessionId(String sessionId) {
    Cookies.setCookie(JSESSIONID,  sessionId);
}
public void sendRequest(final BaseRequest baseReuest){
    long currentTime = getApplicationServices().getTimeManager().getCurrentDate().getTime();
    if(isSessionIdle()){
        getBaseClientFactory().restart(true);
        return;
    }
    if(baseReuest.getOptionsRequest().isShowLoader()){
        showLoader(true);
        loaderRequestsCounter++;
    }
    try {
        String url = baseUrl + baseReuest.getMethodName();
        RequestBuilder requestBuilder = new RequestBuilder(RequestBuilder.POST, url);
        requestBuilder.setHeader("Content-type", "application/x-www-form-urlencoded");
        baseReuest.addParam(JSESSIONID, getSessionId());
        requestBuilder.sendRequest(baseReuest.getParamsAsString(), new RequestCallback() {

            @Override
            public void onResponseReceived(Request request, Response response) {
                requestFinish(baseReuest);
                int status = response.getStatusCode();
                if(status == 200){
                    String json = response.getText();
                    BaseRequestResponse baseRequestResponse = baseReuest.buildResponse(json);
                    if(!baseRequestResponse.isSuccess()){
                        showFailureMessage(baseRequestResponse.getFailureResponse());
                    }
                    baseReuest.notifyResponse(baseRequestResponse);
                }
                else{
                    onErrorResponse();
                }
            }

            @Override
            public void onError(Request request, Throwable exception) {
                onErrorResponse();
            }
            private void onErrorResponse(){
                requestFinish(baseReuest);
                String message = getLabels().getLabel(IGeneralInfoLabels.THERE_IS_PROBLEM_ACCESSING_THE_SERVER);
                if(!isOnline()){
                    message = getApplicationServices().getGeneralManager().getLocalLabel().connectionNotAvailable();
                }
                FailureResponse failureResponse = new FailureResponse(message);
                showFailureMessage(failureResponse);
                baseReuest.notifyFailureResponse(failureResponse);
            }
            private void showFailureMessage(FailureResponse failureResponse){
                if(baseReuest.getOptionsRequest().isShowMessage()){
                    BaseRequestManager.this.showFailureMessage(failureResponse);
                }
            }
        });
        lastRequestSentTime = currentTime;
    } catch (RequestException e) {
        showLoader(false);
        requestFinish(baseReuest);
    }
}
例如,对于第一个请求,sessionId是jk7br57mo1e5,所以我将sessionId添加到客户端的cookie中 但是在每个请求中,服务器都会创建新的sessionId为什么? 多谢各位