Django自定义后端Session Timeout

时间:2013-06-16 09:08:13

标签: django

从文档中我可以看到如何创建自己的django auth后端。虽然考虑到会话并且用户详细信息在3个表(auth_user,Session以及存储您的其他authorzsation令牌时的自定义表)中分开,但它可能会略微混乱。

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

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

希望这是有道理的。

由于

1 个答案:

答案 0 :(得分:1)

在设置:

SESSION_EXPIRE_AT_BROWSER_CLOSE = False

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

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

注意:未经测试,我为我的应用编写了一个similar middleware,我已将其更改为符合您的要求。