【问题标题】:Signout after user disconnects on Flask用户在 Flask 上断开连接后注销
【发布时间】:2018-03-22 20:53:05
【问题描述】:

使用过flask-login 的人都知道装饰器fresh_login_required。我正在尝试自己实现类似的东西。

它不一定是装饰器。我只想在用户完全断开连接后能够做一些工作(例如:关闭浏览器)。 使用全局整数变量来计算活跃/在线用户总数是个好主意吗?

提前致谢:)

【问题讨论】:

  • 服务器无法知道关闭浏览器并离开的用户与仍在盯着您的网页的用户之间的区别:它只知道浏览器告诉它什么。如果您有多个进程(例如在 WSGI 容器中),那么“全局”变量根本就不是全局的。
  • 那么记住我按钮是如何工作的,flask-login 是如何检测新登录的?
  • @FahimFerdous 如果你想知道 flask-login 是怎么做的,请阅读它的源代码。 ☺
  • 我试过了,但不清楚他们是如何做到的。虽然来源不是太大,但我仍然无法理解

标签: python flask flask-login


【解决方案1】:

Flask 会话由 flask 会话接口处理。 Flask-Login 只是检查当前会话是否新鲜。

from flask import session

def login_fresh():
     '''
     This returns ``True`` if the current login is fresh.
     '''
     return session.get('_fresh', False)

def login_user():
    '''
    Your login code here
    '''
    session['_fresh'] = True 

def logout_user():

    '''
    Your logout code here
    '''
    if '_fresh' in session:
        session.pop('_fresh')

上面的sn-p代码来自Flask-Login源码,可以访问here。如果您需要用户重新登录,只需检查他的登录是否是新的。

【讨论】:

  • 但它自己设置值。两个值。
  • 我已经检查过了。但是键/值是由模块本身设置的,而不是烧瓶...
  • 是的,但会话仍由 Flask-Session 处理,我将编辑我的答案。
【解决方案2】:

你应该可以做到:

@app.before_request
def make_session_permanent():
    session.permanent = False

来自文档:

http://flask.pocoo.org/docs/0.11/api/#flask.session.permanent

【讨论】:

  • 但是当我检查 session.new 的值时,它总是显示为 false。如果我在检查值后重定向,浏览器会抱怨它没有正确重定向并暗示它可能是由于 cookie 被禁用而发生的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-08
  • 1970-01-01
相关资源
最近更新 更多