1

Python と Google App Engine を使用した Web アプリ開発に関する Udacity コースに取り組んでいます。Cookie の設定 (訪問者数をカウントするため) とハッシュ化に関するレッスン中に、混乱することに気付きました。

楽しみのために、さらに 1 回の訪問を追加する前後の「訪問」の Cookie 値を出力することにしました。出力は次のとおりです。

5|e4da3b7fbbce2345d7772b0674a318d5  [[[this is cookie before adding 1 to it]]
You've been here 6 times!  [[this is printed after adding 1 to cookie, but is not the cookie]]
5|e4da3b7fbbce2345d7772b0674a318d5  [[this is printing the cookie after one has been set using "Set-Cookie"]]

真ん中の6が正解です。Cookie ビューアを使用して、Cookie と一致することを確認しました。したがって、最初の行の「5」も正しいです (この行は 1 が追加される前に Cookie を読み取っているため)。

私を混乱させているのは、1を追加した後にCookieの値も出力し、Cookieがすでに6にリセットされているにもかかわらず、まだ「5」を出力していることです.

何故ですか?新しい Cookie を正しく読み取る前に、ブラウザを更新する必要がありますか?

問題のコードは次のとおりです: class CookiePage(BlogHandler): def get(self): self.response.headers['Content-Type'] = 'text/plain' visits = 0 'visits') self.write(visits_cookie_str) # これは出力される最初の行です self.write("\n")

    if visits_cookie_str:
        cookie_val = check_secure_val(visits_cookie_str)
        visits = int(cookie_val)

    visits += 1

    new_cookie_val = make_secure_val(str(visits))

    self.response.headers.add_header('Set-Cookie', 'visits=%s' % new_cookie_val)
    self.write("You've been here %s times!\n" % visits) # this is the 2nd line printed
    cookie = self.request.cookies.get('visits')
    self.write(cookie) # this is the 3rd line printed which SHOULD match the one above it but doesn't 
4

1 に答える 1

1

Cookie は、ブラウザがリクエストを行ったときに送信されるヘッダーに保存されます。サーバーに Cookie を設定すると、通常、その Cookie の値は、ブラウザがそれを確認して送信できるようになった後、次のリクエストまで利用できません。新しいヘッダー値。

アップデート

あなたのコードを見た後、私が説明した状況は実際に起こっていることです. Cookie を設定するためにクライアントに送り返される応答にヘッダーを設定しています。ただし、クライアントは、リクエストの処理が完了するまでこの Cookie を認識しません。self.requestCookie が設定される前に処理されている現在のリクエストを反映しているため、更新されません。

リクエスト中に値を追跡したい場合は、変数に保存する必要があります。

于 2013-10-11T12:06:02.003 に答える