2016-05-14 25 views
1

最後にFlaskサイトにログインしてからユーザーがブラウザーを閉じたかどうかを検出できるようにしたい。私はFlaskのセッションはブラウザを閉じると有効期限が切れるはずですが、セッションデータは私が知る限りブラウザに保存されています。ユーザーがブラウザを閉じたときにすべてのセッションデータをクリアするにはどうすればよいですか?Flask.sessionはブラウザーを閉じた後も持続する

mainapp.py:

@mainapp.route('/') 
def home(): 
    if 'user_name' in session: 
     logger.debug('Logged in as {0}'.format(escape(session['user_name']))) 
    return render_template('home.html') 

がuserviews.py:

@userviews.route("/login", methods=["GET", "POST"]) 
def login(): 
    form = LoginForm(request.form) 
    if form.validate_on_submit(): 
     #get user from db 
     session['user_name'] = user.user_name 

setup.py:

app.secret_key = 'somethingreallysecret' 

答えて

2

flask sessionは、データがあっても永続化され、クッキーを使用しているためユーザーがウィンドウを閉じます。 Flask-SocketIOでウィンドウを閉じる使用状況を追跡できます。

あなたがセッションから特定のキーを削除したい場合は

from flask import session 
from flask_socketio import SocketIO, emit 
from flask.ext.login import current_user, logout_user 

app = Flask(__name__) 
app.config['SECRET_KEY'] = 'secret!' 
socketio = SocketIO(app) 

@socketio.on('disconnect') 
def disconnect_user(): 
    logout_user() 
    session.pop('yourkey', None) 
+0

質問に答えたので受け入れました。しかし、SocketIOを使用してパフォーマンスを低下させることは、ブラウザを閉じるユーザーを追跡するだけの目的ではないと判断しました。 –

+0

私はそれを得ることはありません。 SocketIOの「切断」信号が機能していないことを意味しますか? –

+0

これはうまく動作しますが、私が見つけたのは、SocketIOを使用するとアプリケーション全体が遅くなることです。 –

1

あなたは明示的にブラウザが閉じたときに期限切れにする必要がありsession.permanent = TrueセッションCookieを設定している場合を除き。

リファレンスFlask documentation on session.permanent

+0

参照:http://stackoverflow.com/a/13766647/118608 – qff

0

バニラフラスコに反して、フラスコ・セッションで開かれたセッションでは、ドキュメントから、デフォルトでは永久的であると思わ:

デフォルトでは、非すべてFlask-Sessionのnullセッションは永続的です。

おそらくSESSION_PERMANENT = Falseを設定しようとしますか?

関連する問題