2016-05-14 222 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使用Cookie數據,即使堅持用戶關閉窗口。您可以使用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時,整個應用程序變慢。 –

0

似乎違背香草瓶,瓶在會議期間打開的會話可通過默認的永久,從文檔:

默認情況下,所有的非Flask-Session中的空會話是永久的。

因此,也許嘗試設置SESSION_PERMANENT = False?