我想改变Django的sessioid令牌的长度,所以不是32个字符,而是像64个字符一样疯狂。我知道很多,但可以做到吗?是否有理由不做这样的事情?
我知道密钥长度是在类SessionBase 中的 django.contrib.sessions.backends 中定义的,但我似乎无法找到如何覆盖的说明后端功能或替换它们。
聚苯乙烯。我是网络开发的新手,所以我发现很难理解一些文档。使用C ++它更容易......
答案 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
。