2016-05-14 28 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?