7

トークンはすでに正しく機能しています。これは次のように設定されています。

session_cookie = SimpleCookie()
session_cookie['key'] = any_string_value
session_cookie['key']["Path"] = '/'

headers = []
headers.extend(("set-cookie", morsel.OutputString())
    for morsel
    in session_cookie.values())

start_response(status, headers)

また、トークンを読み取って、必要な情報を抽出することもできます。

# Get cookies
cookies = request.get_cookies()
#     Get current token from cookies
token   = cookies['token'].value

さて、Cookieに有効期限を設定するための最良のアプローチは何でしょうか、私は2つの可能なキーがあることを知っています:

  1. session_cookie ['key'] ['max-age']="秒単位の時間"
  2. session_cookie ['key'] ['expiration']="将来の日付"

トークンの有効期限が切れているかどうか、または期限切れのトークンを管理するための最良の方法は何でしょうか。

どうもありがとう!

4

1 に答える 1

3

トークンを取得しようとしたときにトークンが存在しない場合は、トークンの有効期限が切れているかどうかを知ることができます。

token   = cookies['token'].value #this will not exist

有効期限が過ぎると、ブラウザはCookieとそれに関連するすべてのものを削除します。

このように、多くの実装では、Cookieを削除したり、たとえばユーザーをログアウトしたりすることもできますが、user_id Cookieの有効期限を過去の値(負の数など)に設定します。

私が理解しているように、サーバー側で期限切れのトークンを検出するためのポリシーが必要であり、それは二重検証によって達成できます。たとえば、トークンを読み取るときに、トークンとサーバー側ごとに一意の識別子を保存して、有効期限が切れているかどうかを確認してください。また、ユーザーがCookieを操作することも可能であるため、Cookieを盲目的に信頼して重要なデータを保存したり、user_idを簡単に検証したりすることは絶対にしないでください。

お役に立てば幸いです。

編集

rfc2109から

Max-Age=delta-secondsオプション。Max-Age属性は、Cookieの存続期間を秒単位で定義します。delta-seconds値は、10進数の非負の整数です。デルタ秒秒が経過した後、クライアントはCookieを破棄する必要があります。ゼロの値は、Cookieをすぐに破棄する必要があることを意味します。

そしてウィキhttpクッキーから

Expiresディレクティブは、Cookieを削除するタイミングをブラウザに指示します。RFC 1123で使用されている形式から派生した日付は、「Wdy、DD Mon YYYY HH:MM:SS GMT」[29]の形式で指定され、このCookieの有効期限が切れる正確な日時を示します。Cookieの有効期限を絶対的な日付/時刻として設定する代わりに、RFC 6265では、Max-Age属性を使用して、ブラウザーがCookieを受信した時間に対する将来の秒間隔としてCookieの有効期限を設定できます。

日付の設定などの手間を省くため、max-ageの使用をお勧めします。間隔を計算するだけです。

もう少し読んでみると、max-ageはIE <9でサポートされていないことがわかりました。つまり、期限切れが望ましいということです。

最大年齢と有効期限

それは役立つはずです;-)

于 2013-01-03T15:54:03.530 に答える