Django 可以请求多少。会话存储?

Django 可以请求多少。会话存储?,django,django-sessions,Django,Django Sessions,我对学习Django会话(以及一般的Django会话)还不熟悉。在我看来,request.session的功能就像一本字典,但我不确定我能在上面保存多少数据。到目前为止,我看到的大多数示例都是使用request.session来存储相对较小的数据,例如短字符串或整数。那么,我可以在request.session上保存的数据量是否有限制,或者它是否与我使用的数据库更相关 我有这个问题的部分原因是因为我不完全理解request.session的存储是如何工作的。它是否像另一个模型一样工作?如果是,我

我对学习Django会话(以及一般的Django会话)还不熟悉。在我看来,request.session的功能就像一本字典,但我不确定我能在上面保存多少数据。到目前为止,我看到的大多数示例都是使用request.session来存储相对较小的数据,例如短字符串或整数。那么,我可以在request.session上保存的数据量是否有限制,或者它是否与我使用的数据库更相关

我有这个问题的部分原因是因为我不完全理解request.session的存储是如何工作的。它是否像另一个模型一样工作?如果是,我如何访问管理页面上的密钥/项目


提前谢谢你的帮助

简而言之:这取决于您使用的后端,您可以使用指定。Te后端可以(但不限于):

  • 'django.contrib.sessions.backends.db'
  • 'django.contrib.sessions.backends.file'
  • 'django.contrib.sessions.backends.cache'
  • 'django.contrib.sessions.backends.cached\u db'
  • “django.contrib.sessions.backends.signed\u cookies”
根据每个后端的实现方式,应用不同的最大值

此外,这也很重要,因为这决定了数据的编码方式。有两个内置序列化程序:

  • “django.contrib.sessions.serializer.JSONSerializer”
    ;及
  • “django.contrib.sessions.serializer.PickleSerializer
串行器 序列化程序确定会话数据如何转换为流,从而对压缩率有一定影响

对于
JSONSerializer
,它将生成一个JSON转储,然后使用base64压缩进行压缩,并使用hmac/SHA1进行签名。与原始JSON blob相比,此压缩比可能有约33%的开销

PickleSerializer
将首先对对象进行pickle,然后对其进行压缩并对其签名。pickle往往不如JSON编码紧凑,但另一方面,pickle可以将不是字典、列表等的对象转换为流

后端 数据序列化后,后端将确定其存储位置。有些后端有局限性

django.contrib.sessions.backends.db
这里,Django使用数据库模型来存储会话数据。如果数据库可以存储高达4Gib的值(例如MySQL),那么它可能会在每个会话中存储高达3Gib的JSON blob。请注意,当然应该有足够的磁盘空间来存储表

django.contrib.sessions.backends.file
在这里,数据被写入一个文件。没有实施任何限制,但当然应该有足够的磁盘空间。某些操作系统会对目录中的文件可以分配的磁盘空间量增加某些限制

django.contrib.sessions.backends.cache
在这里,它存储在您在中指定的一个缓存中,具体取决于您选择的缓存系统,可以应用某些限制

django.contrib.sessions.backends.cache\u db
这里您使用了
缓存
数据库
的组合:您使用缓存,但数据由数据库支持,因此,如果缓存无效,数据库仍然包含数据。因此,这意味着两个后端的限制都适用

django.contrib.sessions.backends.signed\u cookies
在这里,您可以在客户端的浏览器中存储已签名的cookie。Cookie的限制在此由浏览器指定

指定浏览器通常应能够为每个cookie存储至少4096字节。但对于签名部分,这个阈值可能根本不够


如果使用浏览器的cookie,则只能存储非常有限的数据。

这取决于所使用的后端。但一般来说,在其中存储大量数据不是一个好主意。