匿名用户的 Django 会话

问题描述 投票:0回答:2

我希望能够收集用户使用网络应用程序的基本统计数据,包括匿名用户和登录用户。

这里的共同点是,使用会话 ID,我可以存储登录和注销用户的数据,并且仍然能够将存储的统计信息链接到给定的会话(会话属于谁并不重要)。

但是,我在收集

session_key
时遇到了问题,因为当匿名用户进入站点时,这似乎并未设置(可能是因为 Django 会话仅在修改时保存

当我使用登录用户测试视图时:

def create(request, *args, **kwargs):
    print request.session.session_key

对于登录用户,会打印

session_key
。对于注销用户或匿名用户,这是
None
。第一次请求站点时,会话不存在,因此不可用于视图。

我当前的计划是创建一个自定义中间件作为官方会话中间件的子类,但重写

process_request()
为那些没有通过
session.save()
的人实例化会话。

我对这种方法唯一担心的是,我不确定它是否会对 Django 的其他部分产生不可预见的后果 - 人们有什么建议吗?

django session django-sessions
2个回答
11
投票

在过去的项目中,我做了您所建议的操作,但只是在一个视图中,我需要对未经身份验证的访问者使用

session_key
。它没有在我的项目中造成任何问题:

if not request.session or not request.session.session_key:
    request.session.save()

# request.session.session_key now set

-4
投票

您可以通过设置选择保存每个请求的会话:

SESSION_SAVE_EVERY_REQUEST = True

这强制 django 为每个会话分配会话密钥

https://docs.djangoproject.com/en/2.1/topics/http/sessions/#when-sessions-are-saved

© www.soinside.com 2019 - 2024. All rights reserved.