2

从文档中我可以看到如何创建自己的 django auth 后端。尽管考虑到会话和用户详细信息跨 3 个表(auth_user、Session 以及存储其他授权令牌时的自定义表),它可能会有点混乱。

我知道您可以在视图中设置会话超时。但是我想知道在自定义身份验证后端创建新会话的同时是否还有另一种(或最好的)方法来设置 django 会话超时。

基本上我的其他身份验证系统的总超时时间为 24 小时,空闲时间为 1 小时,所以我想将这些超时时间与 django 会话尽可能接近。

希望这是有道理的。

谢谢

4

1 回答 1

1

在设置:

SESSION_EXPIRE_AT_BROWSER_CLOSE = False

此中间件将检查最大 24h + 1h 空闲:

class timeOutMiddleware(object):

    def process_request(self, request):
        shouldLogout = False
        if request.user.is_authenticated():
            if 'beginSession' in request.session:            
                elapsedTime = datetime.datetime.now() - \
                              request.session['beginSession']
                if elapsedTime.seconds > 24*3600:
                    del request.session['beginSession'] 
                    shouldLogout = True
            else:
                request.session['beginSession'] = datetime.datetime.now()

            if 'lastRequest' in request.session:            
                elapsedTime = datetime.datetime.now() - \
                              request.session['lastRequest']
                if elapsedTime.seconds > 60*60:
                    del request.session['lastRequest'] 
                    shouldLogout = True

            request.session['lastRequest'] = datetime.datetime.now()

            if shouldLogout:
                logout(request)

        else:
            if 'beginSession' in request.session:
                del request.session['beginSession']
            if 'lastRequest' in request.session:
                del request.session['lastRequest']

        return None

注意:未经测试,我为我的应用程序编写了一个类似的中间件,我已经对其进行了更改以符合您的要求。

于 2013-06-16T13:46:35.817 回答