gpt4 book ai didi

django - 为什么 django 在数据库中创建许多 session 对象?

转载 作者:行者123 更新时间:2023-12-02 05:10:58 26 4
gpt4 key购买 nike

我有一个 vanilla django 项目,其应用程序名为“app”。它有 views.py 和 middleweres.py。

#views.py
from django.http.response import HttpResponse

def home(request):
return HttpResponse('')

#settings.py

MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'app.middlewares.M',
)

#middlewares.py
class M(object):
def process_request(self, request):
request.session['a']='a'

Django 在每次请求时向数据库中的 session 表添加一行。为什么?

UPD:我还是很困惑。我为这个问题做了一个 github 项目:https://github.com/vinograd19/django-session-problem/你可以在那里找到我的代码并在你的机器上运行它

最佳答案

您的自定义中间件 M 正在根据每个请求修改 session 字典 (Writing your own middleware):

process_request() is called on each request, before Django decides which view to execute.

即使您根据每个请求修改 session ,每个用户(同一浏览器上的同一访问者)也应该只有一行。如果同一个访问者发出多个请求,他对应的 session 行应该在每次请求时更新(因为你的中间件'M')。不会为同一位访问者创建额外的行,但会在新访问者访问您的网站时创建新行。来自 Django 文档:

consider what happens with the database backend. When a user logs in, Django adds a row to the django_session database table. Django updates this row each time the session data changes. If the user logs out manually, Django deletes the row. But if the user does not log out, the row never gets deleted. A similar process happens with the file backend.

如果您在数据库 session 表中发现许多行,那么您可能有需要清除的过期 session (Clearing the session store)

Django does not provide automatic purging of expired sessions. Therefore, it’s your job to purge expired sessions on a regular basis. Django provides a clean-up management command for this purpose: clearsessions. It’s recommended to call this command on a regular basis, for example as a daily cron job.

在这种情况下,您应该调用 clearsessions command :

django-admin.py clearsessions

您应该设置一个 cron 作业以定期调用此命令并清除过期的 session 。

关于django - 为什么 django 在数据库中创建许多 session 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15481491/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com