0

カンマ区切り値を持つバージョン1のCookieを送信しているクライアントがあります。これは、バージョン1のCookieでは問題ないはずですが、バージョン0では許可されていません。

だからこれはクッキーです

test.cookie=1,1

Cookie [] Cookies = request.getCookies []を読み取ると、次のような2つのCookieが返されます。

test.cookie=1
1=

したがって、Cookieの値は、バージョン0のCookieで期待される次のCookieの区切り文字として表示されます。したがって、問題は、着信HttpServletRequestからCookieを読み取る前に、Cookieバージョンを設定できるかどうかです。

Cookie.setVersion(int)メソッドがあることは知っていますが、コンテナーのCookieを設定していないため、これは役に立ちません。(これは、実際にコンテナにCookieのバージョンを設定するための手がかりになる可能性があります。これから見ていきます)

編集 私がこれを回避した方法は、ヘッダーを読み取り、セミコロンで区切られたリストとして提供されるCookieヘッダーの値を読み取り、各Cookie名と値のペアを自分で解析してCookieの値のコンマを解析することです。その後、正しく保存され、Cookieが1つだけ取得されます。ただし、HttpServleRequest.getCookies()を使用してこれを行う方法があるかどうかを知っておくと便利です。

4

3 に答える 3

1

RFC2965およびRFC2109によると、値フィールドで使用する場合、,文字を引用符で囲む必要があるため、",". これは、コンマが 2 つの Cookie を区切るためのものなのか、値に意味があるのか​​を暗示するのに役立ちます。私のRFC6265の理解では、これ,はまったく許可されていません。

于 2012-08-27T13:21:18.153 に答える
0

クライアントからの Cookie を制御できない場合は、選択肢しかありません。
Cookie を 2 つの部分として読み、それらを自分で組み合わせて 1 つの Cookie にし、それを利用します。次のようなものを使用します。

new_cookie.setValue(cookies[0].getValue()+cookies[1].getValue());

でさらに操作を行いますnew_cookie

于 2012-08-27T17:40:16.583 に答える
0

値を Cookie にエンコードすると、これが解決されました。

于 2012-10-16T18:21:38.903 に答える