8

FlaskNginx + WSGI(FastCGI&Gevent)で提供されるアプリケーションがあり、標準のFlaskセッションを使用しています。またはその他の追加オプションは使用しませが、デフォルト構成で設定するだけです。session.permanent=TrueSECRET_KEY

セッションに(key、value)ペアを保存せSID = session['_id']、エントリに依存してリピーターを識別します。私は次のコードを使用しますSID

@page.route ('/')
def main (page='home', template='index.html'):

    if not request.args.get ('silent', False):
        print >> sys.stderr, "Session ID: %r" % session['_id']

私は次の観察をしました:

  1. IPアドレスは同じですが、ブラウザが異なると、取得も異なります。これSIDsは予想されることです。
  2. 異なるIPと同じブラウザの場合、私は再び異なるものを持っていますSIDs-期待されています。
  3. 同じブラウザで同じIPアドレスを使用しても、同じ結果が得られSIDます。これも予想されます。

ここで、ポイント(3)は興味深いものです。これは、対応するCookieを削除しても、一定SIDのままであるためです。それでもある程度は理解できるかもしれませんが、実際には、異なるCookie間で変更されることを期待していました。しかし、私が見る唯一の違いはそれですSID

session.new is True

Cookieの削除直後の最初のリクエスト。それでも非常に期待されています。しかし、これらの事実を考えると、私は次の問題に直面しています。

  1. これは、同じIPの背後にいる(同じブラウザー構成の)異なるユーザーの場合、バックエンドがそれらを同じユーザーと間違えることを意味しますか?

  2. ポイント(1)が当てはまらない場合、これらの「スティッキー」セッションの現在の動作は実際には非常に快適です。これにより、ユーザーが対応するCookieを削除したという理由だけでデータが失われる可能性がなくなります。

    同じブラウザで同じネットワークからサイトに再度アクセスすることで、1日を節約できます。私はそれが好きですが、ポイント(1)が当てはまらない場合に限ります。

  3. ポイント(1)は実際に私を噛むと思いますが、結論は実際にtokenはセッションにを保存し、ユーザーがCookieを削除するだけで自分自身を爆破できるという運命を受け入れることでしょうか?

  4. または、新鮮なクッキーごとFlaskに異なるものを与えるように指示する方法はありますか?SIDs

実際、この質問は、(同じIP上で)異なるユーザーをシミュレートする負荷影響サービスを使用したために発生しましたが、対応するユーザーSIDsがすべて同じであるため、バックエンドはそれらを単一のユーザーとして見続けました。

このアプリケーションは、http: //webed.blackhan.chでテストできます(リリース時にhttps://notex.ch [ブラウザーベースのテキストエディター]を移動します)。ご回答ありがとうございます。

4

2 に答える 2

7

Flask-Login 拡張機能を使用しているようです。id トークンを生成するコードは次のとおりです。

def _create_identifier():
    base = unicode("%s|%s" % (request.remote_addr,
                              request.headers.get("User-Agent")), 'utf8', errors='replace')
    hsh = md5()
    hsh.update(base.encode("utf8"))
    return hsh.digest()

それは基本的にただmd5(ip_address + user_agent)です。

Flask はWerkzeug の安全な Cookieを使用して、この識別子を保存します。安全な Cookie は (その名前が示すように) 安全です。

このモジュールは、サーバーがチェックするチェックサムを追加するため、クライアントから変更できない Cookie を実装します。ユーザーIDまたはログインしているユーザーをマークするものしかない場合は、セッションの代替として使用できます。

于 2013-02-13T08:35:16.167 に答える