Django会话为匿名用户

时间:2015-09-08 13:05:59

标签: django session django-sessions

我希望能够收集匿名用户和登录用户使用网络应用程序的基本统计信息。

这里的通用性是使用会话ID,我可以为登录和注销的用户存储数据,并且仍然能够将存储的统计信息链接到给定的会话(会话所属的人是无关紧要的)

但是,我遇到了收集session_key的问题,因为当匿名用户进入网站时似乎没有设置(可能是因为Django会话是only saved when modified

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

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

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

我目前的计划是创建一个自定义中间件作为官方会话中间件的子类,但是覆盖process_request()来为那些没有通过session.save()的人实例化会话。

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

2 个答案:

答案 0 :(得分:2)

在过去的项目中,我按照您的建议行事,但只是在我需要对未经身份验证的访问者使用session_key的视图中。它没有在我的项目中造成任何问题:

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

# request.session.session_key now set

答案 1 :(得分:0)

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

SESSION_SAVE_EVERY_REQUEST =真

这迫使django为每个会话分配会话密钥

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