2

この問題について、数時間頭を井戸にぶつけていました。Cookie を正しく設定できません。私が設定している Cookie は、保存されたり、適切に送り返されたりしないようです。

状況は、Cookie:

  • まったく同じリクエストを送信すると返送されますが、
  • 別のパスでリクエストを送信した場合、返送されません。
  • ブラウザを再起動しても持続しないようです
  • Chrome 開発者ツールの [リソース] 領域に表示されません。

サーバー:「google app engine」の「webapp」

クライアント: Chrome ブラウザー、Javascript、jQuery、Ajax 呼び出し

次の ajax を使用してユーザーをログインさせると、「トークン」を含む Cookie が設定されます。

$.ajax({
    type:   'POST',
    url:    '/rest/login/',
    data: JSON.stringify({username:username, password: password}),
    error: function(jqXHR, status, errorThrown){...},
    success: function(data, status, jqXHR){...}
});

これにより、次のヘッダーの大きな picが生成されます。

ここに画像の説明を入力

サーバーは、Google アプリ エンジンで webapp を実行しています。これは、Cookie を設定する方法です。

w_self.response.set_status(200)
#     Put the token in the cookies. "str()" is used because without it, there is a unicode error
w_self.response.headers.add_header(str('Set-Cookie'), str('token=%s; max_age=360;' % token))
#     The user
r_object['user'] = the_user
# Respond
w_self.response.out.write(json.dumps(r_object))

このページが再度リクエストされると、 Cookie IS がサーバーに送り返されます。

ここに画像の説明を入力

しかし、開発者ツールの大きな写真でクッキーを探索するときに見つけることができないため、どこにも保存されていないようです:

ここに画像の説明を入力

また、パスがまったく同じではないリソースをリクエストした場合にも送信されません (「login」ではなく「logout」:

$.ajax({
    type:   'POST',
    url:    '/rest/logout/',
    data: JSON.stringify({something:'else'}),
    error: function(jqXHR, status, errorThrown){...},
    success: function(data, status, jqXHR){...}
});

リクエストは次のようになります。

大きい写真:

ここに画像の説明を入力

4

2 に答える 2

1

パスを設定しない場合、デフォルトでは、ご覧のとおり、パスを設定したパスにのみ送り返します。

また、あなたが持っているようにmax_ageではなくMax-Ageであることも意図していると思いますが、webapp2が与える応答オブジェクトに関係なく、set_cookieメソッドがあります-それはすべて適切に行われると確信しています.

于 2012-08-31T23:40:59.423 に答える
1

ヘッダーの設定が機能しない理由がわかりません。set cookie メソッドを使用してみてください。

# Saves a cookie in the client.
response.set_cookie('some_key', 'value', max_age=360, path='/',
                    domain='example.org', secure=True)

http://webapp-improved.appspot.com/guide/response.html#setting-cookies

set_cookieメソッドのソースは次のとおりです。

http://code.google.com/p/googleappengine/source/browse/trunk/python/lib/webob_1_1_1/webob/response.py#616

于 2012-08-31T23:41:51.563 に答える