2013-02-26 22 views
8

私はクライアント側でクッキーを設定するためにRestレスポンスを使用しています。しかし、Chromeで「リソース」を開いたときにクッキーが設定されているのを見ることはできません。面白いことに、私がクロムの設定に行き、すべてのクッキーをチェックするとき、私は設定しているクッキーを見つけます。もう一度、w3schoolsのgetCookie()JavaScript関数(またはすべての可能性を扱うためのより良いバージョン)では何も取りません。私はfirefoxを試しました、同じことが起こります。私はすべてのクッキーを見ると、私はクッキーを見ますが、JSの関数getCookie()は私に何も返しません。私はクッキーが正しく設定されていないと思う。ここで応答でJAX-RSクッキーがブラウザに表示されない

は私の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); 

     return Response.ok(jsonResponse, MediaType.APPLICATION_JSON) 
       .cookie(cookie1,cookie2).build(); 

そして、これは奇妙だ、私のJS getCookie()関数

 
    function 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 
        .split(/[,;]/) 
        .map(
          function(cookie) { 
           var parts = cookie.split(/=/, 2), name = decodeURIComponent(parts[0] 
             .trimLeft()), value = parts.length > 1 ? decodeURIComponent(parts[1] 
             .trimRight()) 
             : null; 
           cookies[name] = value; 
          }); 
     } else { 
      c 
        .match(
          /(?:^|\s+)([!#$%&'*+\-.0-9A-Z^`a-z|~]+)=([!#$%&'*+\-.0-9A-Z^`a-z|~]*|"(?:[\x20-\x7E\x80\xFF]|\\[\x00-\x7F])*")(?=\s*[,;]|$)/g) 
        .map(
          function($0, $1) { 
           var name = $0, value = $1.charAt(0) === '"' ? $1 
             .substr(1, -1).replace(/\\(.)/g, "$1") 
             : $1; 
           cookies[name] = value; 
          }); 
     } 
     return cookies; 
    } 
    function getCookie(name) { 
     return getCookies()[name]; 
    } 

enter image description here enter image description here

+0

誰でも救助する?? –

答えて

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"] 

クッキーもChromeのリソースに現れました。

2

あなたの機能があなたのクッキー情報を取得できない理由はわかりませんが、ブラウザに表示されない理由がわかります。

コンソールでCookieを表示するためにブラウザが設定した特定のパスにアクセスする必要があることを覚えました。

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

0

誰かがこの問題に気づいた。

この問題は、お使いのブラウザでは、あなたがこれらの値を参照する必要があり、ドメインやパスの値が適切に

設定されていないが、例えば、パスとドメイン

NewCookie cookie = new NewCookie("cookie-name", "cookie-value,"/", "", "cookie description", 1000000, false); 

を設定するには、以下のスニペットを使用したときに発生しますそのセットの後に

Set-Cookie:x-auth-cookie=eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJtbTMiLCJhdWRpZW5jZSI6IkJST1dTRVIiLCJjcmVhdGVkIjoxNDg1MjU4MDcwMzQ2LCJyb2xlcyI6WyJBRE1JTiIsIlRFQUNIRVIiXSwiZXhwIjoxNDg2MjU4MDcwfQ.TM6oiCsOXh2zNou00H-5tkafAj40AngkbrCA62Vdyi5si_5hZFdmZFfitmK_bgRJexmFC49KlpAaRzGJF8bvMQ;Version=1;Comment="cookie description";Domain=;Path=/;Max-Age=1000000 
関連する問題