Django会话为匿名用户

jvc*_*c26 7 django session django-sessions

我希望能够收集匿名用户和登录用户使用webapp的基本统计信息.

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

但是,我session_key遇到了收集问题的问题,因为当匿名用户进入网站时似乎没有设置(可能是因为Django会话只在修改时保存).

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

def create(request, *args, **kwargs):
    print request.session.session_key
Run Code Online (Sandbox Code Playgroud)

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

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

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

Eri*_*ner 7

在过去的一个项目中,我做了你的建议,但只是在我需要session_key用于未经身份验证的访问者的视图中。它没有在我的项目中引起任何问题:

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

# request.session.session_key now set
Run Code Online (Sandbox Code Playgroud)