Stack Overflow 上有一个新徽章。 “woot”徽章颁发给在 30 天内每天访问该网站的用户。您如何实现这样的功能?您如何以最简单的方式跟踪用户在 X 天内每天访问该站点的情况?
我想有两个字段 - 一个用于上次登录的时间戳,另一个用于计算用户连续访问该站点的天数。逻辑是先将计数器设置为1,同时存储登录时间。在下次登录时,检查自上次登录以来是否不超过一天,并增加计数器,或将其重新设置为 1。然后将时间戳字段更新为当前日期。
你能做得更简单吗?
最佳答案
您确实需要一个 cookie,因为人们可能不会每天都登录——例如,因为他们自动登录了 2 周,或者因为他们在您的网站上连续 50 小时不 sleep 和不吃午餐地做事: ) 您可能实际上想要计算用户访问站点的时间。
现在,理论上可以记录每次访问并执行数据库查询,正如上面所建议的,但您可能会认为(就像我一样)它在实用性和隐私+简单性之间取得了错误的平衡。
您指定的算法明显存在缺陷:由于您只存储整数天数,您会错过每 12 小时登录和退出一次的用户(您的算法会将天数保持为 1)
这是我发现最干净的解决方案,每个用户有两个日期字段,在一种不言自明的非面向对象 Python 中:
# user.beginStreak----user.lastStreak is the last interval when
# user accessed the site continuously without breaks for more than 25h
def onRegister (user):
...
user.beginStreak = user.endStreak = time() # current time in seconds
...
def onAccess (user):
...
if user.endStreak + 25*60*60 < time():
user.beginStreak = time()
user.endStreak = time()
user.wootBadge = ( user.endStreak-user.beginStreak > 30*24*60*60 )
...
(请原谅我的 Pythonic 技能,我是一个学术和第一次网站用户)
你不能用一个变量来完成这项任务。我相信有人可以写出清晰的论据来证明这一事实。
关于database-design - 如何跟踪用户每天访问该网站 X 天?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/932610/