サーバー側 (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*~'"()!±
まったく同じ値を生成する方法について何か考えはありますか? これにどのように対処しますか?