保留匿名用户Django的记录

保留匿名用户Django的记录,django,Django,我想在我的网站上记录匿名用户的行为。并希望与django服务器保持同步。最好的方法是什么?到目前为止,我遇到了使用浏览器的本地存储的方法,但它在某些情况下并不有效,例如保留来宾用户愿望列表的记录等 Django使用带有Session\u键的Session对象作为主键,这也是您可以通过request.Session.Session\u键获得的值 因此,您可以为用户当前正在处理的会话对象创建一个外键。这样做的好处是,如果清除了会话,则存储在该会话中的所有数据也将被删除 因此,如果您有一个MyMode

我想在我的网站上记录匿名用户的行为。并希望与django服务器保持同步。最好的方法是什么?到目前为止,我遇到了使用浏览器的本地存储的方法,但它在某些情况下并不有效,例如保留来宾用户愿望列表的记录等

Django使用带有
Session\u键的
Session
对象作为主键,这也是您可以通过
request.Session.Session\u键
获得的值

因此,您可以为用户当前正在处理的
会话
对象创建一个
外键
。这样做的好处是,如果清除了
会话
,则存储在该会话中的所有数据也将被删除

因此,如果您有一个
MyModel
要链接到会话,您可以使用:

from django.contrib.sessions.models import Session

class MyModel(models.Model):
    # …
    session = models.ForeignKey(Session, on_delete=models.CASCADE)
来自django.contrib.sessions.models导入会话
类MyModel(models.Model):
# …
session=models.ForeignKey(session,on_delete=models.CASCADE)
您可以通过以下方式获取会话密钥:

# add a record
if not request.session.session_key:
    request.session.create()
session_id = request.session.session_key
MyModel.objects.create(session_id=session_id)
#添加记录
如果不是request.session.session\u键:
request.session.create()
session\u id=request.session.session\u密钥
MyModel.objects.create(session\u id=session\u id)

请注意,如果用户清除浏览器cookie,会话可能会过期或“无法访问”。虽然存储与会话相关的数据本质上不是一个坏主意,但它不是很持久。

@gamer:Django的会话将在客户端浏览器中存储一个包含会话id的cookie。浏览器每次发出请求时都会发送cookie,因此没有额外的开销,它已经存在于请求中。您不必自己实现保存:Django的会话中间件会相应地处理这个问题。@gamer:这是正确的。但是请注意,用户的浏览器当然可以忽略这一点,例如,决定在1小时后清理它。毕竟,数据存储在浏览器中,因此浏览器决定存储什么以及存储多长时间。@gamer:如果您创建一个愿望列表,清除该网站的cookie和缓存,然后再次访问该网站,该怎么办?@gamer:所以它显然也使用cookie。您可以指定
会话\u COOKIE\u年龄
。我只是说一些浏览器可以忽略这一点。例如,在Firefox中,当您关闭浏览器时,您可以说需要删除所有cookie。@玩家:会话cookie很可能从您访问该站点的那一刻起(或者至少在上个月的第一次访问时)就存在了。