8

クライアント側でCookieを設定するためにRESTレスポンスを使用しています。しかし、Chromeで「リソース」を開いたときにCookieが設定されているのがわかりません。しかし、興味深いことに、Chromeの設定に移動してすべてのCookieを確認すると、設定しているCookieが見つかります。繰り返しますが、w3schoolsのgetCookie()javascript関数(またはすべての可能性を処理するためのより良いバージョン)は私に何もフェッチしません。Firefoxを試してみましたが、同じことが起こります。すべてのCookieを表示すると、Cookieが表示されますが、JS関数getCookie()は何も返しません。クッキーが正しく設定されていないと思います。

これが私のJAX-RS応答です:

    Cookie c1 = new Cookie(Constants.SESSION_TOKEN、response
                .getSessionToken()。getValue());

        Cookie c2 = new Cookie(Constants.USER_IDENTIFIER、
                response.getUserIdentifier());

        NewCookie cookie1 = new NewCookie(c1);
        NewCookie cookie2 = new NewCookie(c2);

        Response.ok(jsonResponse、MediaType.APPLICATION_JSON)を返します
                .cookie(cookie1、cookie2).build();

そしてこれは私のJSgetCookie()関数です

    関数getCookies(){
        var c = document.cookie、v = 0、cookies = {};
        if(document.cookie.match(/ ^ \ s * \ $ Version =(?: "1" | 1); \ s *(。*)/)){
            c=RegExp。$1;
            v = 1;
        }
        if(v === 0){
            c
                    。スプリット(/[、;]/)
                    。地図(
                            function(cookie){
                                var Parts = cookie.split(/ = /、2)、name = decodeURIComponent(parts [0]
                                        .trimLeft())、値=パーツ。長さ> 1?decodeURIComponent(parts [1]
                                        .trimRight())
                                        : ヌル;
                                クッキー[名前]=値;
                            });
        } そうしないと {
            c
                    。マッチ(
                            /(?:^|\s+)([!#$%&'*+\-.0-9A-Z^`az|~]+)=([!#$%&'*+\-.0 -9A-Z ^ `az |〜] * |"(?:[\ x20- \ x7E \ x80 \ xFF] | \\ [\ x00- \ x7F])* ")(?= \ s * [、; ] | $)/ g)
                    。地図(
                            function($ 0、$ 1){
                                var name = $ 0、value = $ 1.charAt(0)==='"'?$ 1
                                        .substr(1、-1).replace(/\\(.)/g、 "$ 1")
                                        :$ 1;
                                クッキー[名前]=値;
                            });
        }
        クッキーを返す;
    }
    関数getCookie(name){
        getCookies()[name];を返します。
    }

ここに画像の説明を入力してください ここに画像の説明を入力してください

4

3 に答える 3

2

関数が Cookie 情報を取得しない理由はわかりませんが、ブラウザに表示されない理由はわかるかもしれません。

ブラウザがコンソールに Cookie を表示するには、Cookie が設定された特定のパスにアクセスする必要があることを思い出すのに役立ちました。

上記の例では、「パス:」セクションに表示されている URL にアクセスしてください。

于 2016-05-24T19:21:50.583 に答える
2

それは奇妙だ。私はあなたの問題を再現しようとしましたが、すべてうまくいきました:

import javax.ws.rs.core.Cookie;
import javax.ws.rs.core.NewCookie;
import javax.ws.rs.core.Response;

@GET
@Path(value = "/test")
public Response test() {
    NewCookie c = new NewCookie("name1", "value1");
    Cookie cookie = new Cookie("name2", "value2");
    NewCookie c2 = new NewCookie(cookie);
    return Response.ok("response1").cookie(c, c2).build();
}

curl -i $URL私にくれた:

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Server: Apache-Coyote/1.1
Set-Cookie: name1=value1; Version=1
Set-Cookie: name2=value2; Version=1
Date: Thu, 19 Sep 2013 13:52:43 GMT
Content-Type: application/json
Content-Length: 13

["a","b","c"]

Cookie は Chrome のリソースにも表示されました。

于 2013-09-19T13:54:54.550 に答える