Restlet:cookie不会发送到域/应用程序的所有页面

时间:2014-07-01 15:21:24

标签: java jquery cookies restlet

我有一个restlet资源,用于对一个人进行身份验证并使用密钥设置cookie:

@Post("json")
public Representation login(String json) {
    // validate user credentials ...

    getResponse().getCookieSettings().add(new CookieSetting(1, "k", key));
    getResponse().getCookieSettings().add(new CookieSetting(1, "p", person.getURI()));

    return new StringRepresentation(response.toString(), MediaType.APPLICATION_JSON);
}

当我调用与login()方法关联的URL时,一切似乎都没问题。 cookie似乎在响应中正确返回,如果我之前已收到过cookie,则会将它们发送到服务器:

Remote Address: 127.0.0.1:8000
Request URL: http://127.0.0.1:8000/api/person
Request Method: POST
Status Code: 200 OK

请求标题

Accept: undefined
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8,pt-PT;q=0.6,pt;q=0.4,es-419;q=0.2,es;q=0.2,en-GB;q=0.2
Connection: keep-alive
Content-Length: 42
Content-Type: application/json
Cookie: k="546f71445bf1bacd60a3f715d0250267"; p="http://compflow.pt/flowOntology/admin"
Host: 127.0.0.1:8000
Origin: http://127.0.0.1:8000
Referer: http://127.0.0.1:8000/job
X-Requested-With: XMLHttpRequest

响应标题

Accept-Ranges: bytes
Content-Length: 46
Content-Type: application/json; charset=UTF-8
Date: Tue, 01 Jul 2014 15:05:13 GMT
Server: Restlet-Framework/2.1.7
Set-Cookie: k=546f71445bf1bacd60a3f715d0250267
Set-Cookie: p=http://compflow.pt/flowOntology/admin
Vary: Accept-Charset, Accept-Encoding, Accept-Language, Accept

http://127.0.0.1:8000/api/person的调用是通过使用JQuery的AJAX调用执行的,如下所示:

$.ajax({
        url: '/api/person',
        type:'POST',
        accepts : "application/json",
        contentType : "application/json",
        processData : false,
        dataType : "text",
        data: JSON.stringify(data),
        success: function (data) {
            data = JSON.parse(data);    
            sessionStorage["userData"] = JSON.stringify(data.data);
            if(callback) callback();
        },
        error: function(data) {
             $('.alert-error').text(data).show();
        }
    });

但是,如果我尝试执行GET(直接通过浏览器)到地址http://127.0.0.1:8000/job,则不会发送cookie。 Cookie标头未在请求中设置。

因为它不是跨域请求,并且没有设置关于cookie的路径和域的限制(我已经尝试将它们设置为" /"和" {{1}我无法了解可能导致此问题的原因。我非常感谢你能给我的所有帮助。

1 个答案:

答案 0 :(得分:0)

奇怪的是,HTTP服务器连接器的类型改变了代码的行为。我已经为此输入了一个问题(https://github.com/restlet/restlet-framework-java/issues/927)。

作为一种解决方法,我建议您确定路径,如下所示:

getCookieSettings().add(new CookieSetting(0, "k", key, "/", null));

NB:在ServerResource内部;您可以使用快捷方式" getCookieSettings()",而不是" getResponse()。getCookieSettings()"。