2

Pylons のバージョンの 1 つが異なっていると考えていますが、実行しているバージョンを簡単に確認する方法が見つかりませんでした。最初の例では、Cookie を設定するために webob を使用して 0.9.7 以上であると確信しています。この環境では、@ 記号を \100 に設定しています。他の環境でわかるように、まったく同じことを行うと、値が適切に設定されます。さらに情報が必要な場合は、お知らせください。

新しいバージョンの Pylons (と思います) の値が正しく設定されていません

response.set_cookie('email', 'user@domain.com', max_age=3600)
response.headers
ResponseHeaders([('Content-Type', 'text/html; charset=utf-8'), ('Content-Length','0'),
 ('Pragma', 'no-cache'), ('Cache-Control', 'no-cache'), ('Set-Cookie',
'email="user\\100domain.com"; expires="Fri, 03-Jun-2011 21:07:07 GMT"; Max-Age=3600; Path=/')])

テスト環境は通常/期待どおりに動作します

response.set_cookie('email', 'user@domain.com', max_age=3600)
response.headers
HeaderDict([('Content-Type', 'text/html; charset=utf-8'), ('Content-Length', '0'),
('Pragma', 'no-cache'), ('Cache-Control', 'no-cache'), ('Set-Cookie', 
'email=user@domain.com; expires="Fri, 03-Jun-2011 21:07:35 GMT"; Max-Age=3600; Path=/')])
4

1 に答える 1

1

新しいバージョンの webob が原因です。

pylons 0.9.7 の webob パッケージは ~0.9.8 で、Cookie 値をエスケープしません。

当時と現在の間のどこかで、webob が値のエスケープを開始したため、「新しい」バージョンが失敗しました。Webob コードベース (新しいバージョン) を掘り下げると、これは Cookie の serialize() メソッドで発生しており、値が適切にエスケープされることが保証されています。古いバージョンはこれらの値を直接設定しており、シリアライズ時にエスケープしていませんでした。

私はvirtualenvで0.9.7を実行する同様の設定をしているので、私のシステムでこの動作を再現することができました.

同じバージョンのメソッドを使用する限り、リクエストの値もエスケープ解除する必要があるため、問題はありません。

于 2011-06-05T09:18:32.363 に答える