【问题标题】:how can I limit the access in Flask如何限制 Flask 中的访问
【发布时间】:2017-06-21 09:24:24
【问题描述】:

我创建了一个项目来模拟登录我公司的网站,放在我的服务器上,让别人使用。

但是公司网站有限制,单个ip只能打开2个会话。

所以当我的两个以上同事登录我的项目时,第三个无法登录。

有没有办法限制访问,所以当有2个用户在使用时,第三个无法登录。

我应该使用全局变量来存储当前用户的数量吗?

【问题讨论】:

    标签: python session flask


    【解决方案1】:

    您可以将IP地址、用户ID或登录名以及上次登录您的应用程序的时间保存到数据库中,并在某些用户登录时进行检查。

    如果用户登录,您将他/她的 ip 地址、id/login 和上次登录应用程序的时间存储到表中。如果尝试从同一 IP 地址第三次登录,您将拒绝它。

    当用户注销时,您会从数据库中删除记录。

    当用户会话自动过期但记录在数据库中时,您需要小心。

    为了避免这种情况,您可以将永久会话设置为 True(即使浏览器关闭,会话也不会被破坏)并将其持续时间设置为固定的时间量 - 比如说 48 小时。然后,您可以创建一个将在您的数据库中定期运行的过程,并检查上次登录时间和会话持续时间。如果差异超过 48 小时,则从数据库中删除该记录。

    您还应该考虑您的 IP 地址是静态的还是动态的。使用静态 IP 地址应该会容易得多。使用动态 - 这取决于它们更改的频率,但肯定会更复杂。

    在用户登录之前,您可以通过这种方式获取他/她的 IP 地址:

    from flask import request
    
    @app.route('/login', methods=['GET', 'POST']):
    def login():
        ip_address = request.remote_addr
        # Check the ip_address and how many sessions are bound to it
    

    【讨论】:

    • 我想限制多少用户登录,而不是一个用户登录多少次。但是数据库也可以解决这个问题。谢谢
    • @Dean.liu 那么你们公司2个用户可以有相同的IP地址吗?
    • 是的,这不重要,只是为了记录我们的日常工作。但是用户体验太差了,每天要花费我将近 15 分钟。所以我想简化它。我尝试在我的笔记本电脑上使用 chrome incognito 登录不同的用户,我只能登录 2 个用户,在我的服务器上结果相同
    • @Dean.liu 我提供的方法可以解决您的问题。您只需要跟踪登录数据库的用户数量,然后在用户注销时删除记录或在会话到期时自动删除记录。
    猜你喜欢
    • 2016-01-16
    • 2014-04-10
    • 2021-08-09
    • 2018-12-26
    • 2021-07-20
    • 2020-01-11
    • 1970-01-01
    • 2010-10-25
    • 1970-01-01
    相关资源
    最近更新 更多