我可以更改Django的sessionid令牌长度吗?

时间:2017-01-18 14:31:27

标签: python django

我想改变Django的sessioid令牌的长度,所以不是32个字符,而是像64个字符一样疯狂。我知道很多,但可以做到吗?是否有理由不做这样的事情?

我知道密钥长度是在类SessionBase 中的 django.contrib.sessions.backends 中定义的,但我似乎无法找到如何覆盖的说明后端功能或替换它们。

聚苯乙烯。我是网络开发的新手,所以我发现很难理解一些文档。使用C ++它更容易......

1 个答案:

答案 0 :(得分:3)

Django中的子类与C ++中的子类相同;你只需要定义一个继承自基类的新类,并覆盖相关的方法。

在您的情况下,会话密钥在_get_new_session_key方法中定义。您需要从已经使用的会话后端继承 - 例如db,file或cache后端 - 并定义该方法。例如:

from django.contrib.sessions.backends.db import SessionStore as OriginalSessionStore

class SessionStore(OriginalSessionStore):
    def _get_new_session_key(self):
        "Returns session key that isn't being used."
        while True:
            session_key = get_random_string(64, VALID_KEY_CHARS)
            if not self.exists(session_key):
                break
        return session_key

现在,您可以在"path.to.module.with.overridden.class"设置中使用SESSION_ENGINE