我正在寻找跟踪在线/离线用户的方法。因此,如果我在列表中显示所有用户,我可以使用图标或某种标记来显示此信息。这是内置在Django的默认Auth系统吗?
我的第一个想法是在我的配置文件中简单地在模型中使用名为last_logout的字段,并在每次用户注销时使用日期/时间更新它。
有了这个信息和内置的last_login我应该能够做出某种功能来确定用户是否正在登录/在线吗?
或者我应该只有一个名为"在线"的布尔字段。我可以在用户登录和注销时更改?
答案 0 :(得分:3)
只有django很难做到。对于这样的任务,异步框架更合适。
例如,tornado。
用户每次下线时都不会明确注销。他们只是关闭浏览器就是这样。您只能使用django auth应用程序来了解它。它不是为此类任务而设计的。
即使您要检查未过期的会话,它也不会为您提供所有在线用户,因为会话可以在30天内未过期。
因此,要获得真正的在线用户,可能的解决方案是:
答案 1 :(得分:2)
您必须考虑用户“在线”的确切含义。由于任何用户都可以随时关闭浏览器窗口而服务器不知道该操作,因此您最终会遇到大量错误的“在线”用户。
您有两个基本选项:
跟踪用户的上次活动时间。每次用户加载页面时,您都会更新计时器的值。要获取所有在线用户的列表,您需要在X分钟之前选择具有活动的用户。这是一些网络论坛所做的。
打开websocket,长轮询连接或服务器的心跳。这就是Facebook聊天的功能。您需要的不仅仅是django,因为要保持连接打开,需要另外一种服务器端资源。