1

サーバー側 (Java) から生成された Cookie の値を、次を使用するこのjquery の Cookie ライブラリから生成された Cookie の値と同じにしようとしています。

encodeURIComponent( value )

Cookie値をエンコードします。

この例の文字列を見てみましょう:

a b,c;d*~'"()!±

Java でこのコードを使用して、Cookie 値をエンコードします。

String result = URLEncoder.encode(str, "UTF-8")
                          .replaceAll("\\+", "%20")
                          .replaceAll("\\%21", "!")
                          .replaceAll("\\%27", "'")
                          .replaceAll("\\%28", "(")
                          .replaceAll("\\%29", ")")
                          .replaceAll("\\%7E", "~");

次に、Cookie を応答に追加します。

Cookie cookie = new Cookie("testCookieServerSide", encodeValue("a b,c;d*~'\"()!±"));
response.addCookie(cookie);

これにより、値が二重引用符で囲まれます。:

"a%20b%2Cc%3Bd*~'%22()!%C2%B1"

jquery ライブラリを使用して同じ値をエンコードすると、同じ値が得られますが、二重引用符はありません。

a%20b%2Cc%3Bd*~'%22()!%C2%B1

二重引用符を生成しないようにJavaに指示することは可能ですか? cookie.setVersion(0)またはcookie.setVersion(1)について聞いたことがありますが、これは何も変わらないようです。

サーバー側でこれら 2 つの値を取得する場合、次の後には同じになります。

URLDecoder.decode(cookie.getValue(), "UTF-8");

... 二重引用符が削除されます。偉大な。

しかし、クライアント側では、2 つの値は異なります。

alert($.cookies.get('testCookieServerSide')); => "a b,c;d*~'"()!±"
alert($.cookies.get('testCookieClientSide')); => a b,c;d*~'"()!±

まったく同じ値を生成する方法について何か考えはありますか? これにどのように対処しますか?

4

1 に答える 1

1

これが私が見つけた修正です:

Java にこれらの二重引用符の追加を停止するように指示する方法が見つからなかったので、それらに対処する必要がありました。

私が使用しているjquery の Cookie ライブラリを変更したので、Cookie の値を次のようにデコードする代わりに:

value = decodeURIComponent( pair[1] );

それは使用しています:

value = decodeURIComponent( pair[1].replace( /^"(.*)"$/, '$1' ) );

このコード行に到達しても、Cookie の値はまだエンコードされています (js ライブラリ自体がクライアント側でエンコードし、上記のコードを使用してサーバー側で Java を使用してエンコードします)。したがって、値の先頭と末尾にある二重引用符は、エンコードされていない場合、Java によって追加された文字である必要があります...値を取得するときにそれらを削除する必要があります。

于 2012-08-21T00:13:10.260 に答える