1
class ...
self.response.headers.add_header('Set-Cookie','user_id = %s'% id_and_hash)
        self.redirect("/app/login")

class ThanksHandler(webapp2.RequestHandler):
    def get(self):
        if 'user_id' in self.request.cookies:
            self.response.out.write('user_id')
        else:
            self.response.out.write("wrong") // what i am getting

そして私はこのクッキーを持っています(クッキーのマネージャーで見ました)

name: user_id
content: 30|a9bdc98e952c0e787aaf0e5466809eea71635d38446d30a9f71f2d15e99fa701

まあ、基本的に問題は、初期化された Cookie を取得できないことです。その理由は?

4

1 に答える 1

3

「Set-Cookie」HTTP ヘッダーを使用して Cookie を直接設定する場合は、Cookie 属性にも注意する必要があります (Cookie の使用方法によって異なります)。

この場合、たとえばパスに Cookie を設定して/app/authから にリダイレクトし/app/loginます。Cookie パスを明示的に指定しない/app/authと、ブラウザーが想定するため、要求時に Cookie は送信されません/app/login。この動作はRFC 6265で指定されています(これは私のコメントで引用したものよりも新しいものですが、正確なアルゴリズムはセクション 5.1.4 に含まれています)。

パス (またはその他の Cookie 属性) を設定するには、セミコロンで区切られた name=value ペアのリストを追加できます。この場合、パスを次のように設定します/(次のように異なる場合があります/app)。

self.response.headers.add_header('Set-Cookie','user_id=%s; Path=/'% id_and_hash)

もちろん、ほとんどのライブラリ/フレームワークは、「Set-Cookie」ヘッダーのラッパーを既に提供しています。「webapp2」の場合、次のように Cookie を設定できますresponse.set_cookie

self.response.set_cookie('user_id', id_and_hash)

パスが自動的に設定される/ため、心配する必要はありません (値も適切にエスケープされます)。

于 2012-05-14T05:13:40.067 に答える