与Django登录相同的用户不得超过3人

与Django登录相同的用户不得超过3人,django,authentication,session,login,Django,Authentication,Session,Login,让我们想象一个由django提供动力的服务,该服务每月向客户收费。所有者不希望他的客户与未付款的人共享帐户。当然,他明白有些人可能希望在一个帐户上进行协作,而不希望将共享帐户的使用限制在同一IP地址 如何让django使用相同的用户名/密码同时登录不超过3人 我想在用户类中实现一个计数器,但不知道这个主意有多好 例如: Paul使用 附加问题:多重登录可能意味着什么问题,我应该采取什么措施来避免帐户用户之间的冲突。您可以使用cookie并在此cookie中存储GUID。如果用户没有GUID,请给

让我们想象一个由django提供动力的服务,该服务每月向客户收费。所有者不希望他的客户与未付款的人共享帐户。当然,他明白有些人可能希望在一个帐户上进行协作,而不希望将共享帐户的使用限制在同一IP地址

如何让django使用相同的用户名/密码同时登录不超过3人

我想在用户类中实现一个计数器,但不知道这个主意有多好

例如:

Paul使用


附加问题:多重登录可能意味着什么问题,我应该采取什么措施来避免帐户用户之间的冲突。

您可以使用cookie并在此cookie中存储GUID。如果用户没有GUID,请给他一个新的GUID。否则,请将其cookie中的GUID与数据库中的GUID进行检查。如果它是最近分配的三个guid之一,那么它就是有效的用法

例如: 用户登录,获取GUID A。清除Cookie。再次登录,获取GUID B。清除Cookie。再次登录,获取GUID C。再次清除Cookie。再次登录,获取GUID D。全部有效。他甚至可以使用包含GUID B或C的现有cookie再次登录,但如果他使用GUID A访问,则他可能正在共享该帐户。(或使用四个或更多web浏览器。)

例2: 用户1登录,获取GUID A。用户2登录,获取GUID B。用户3登录,获取GUID C。用户4登录,获取GUID D。此时,GUID A将变为无效,您将退出用户1


要做到这一点,您只需跟踪分配给用户的三个最新GUID,每当用户清除cookie时,就用新GUID替换最旧的GUID。如果您在每个web请求中都检查这一点,您将有效地阻止每四分之一(甚至更多)的用户。

有趣。但在每次请求时都要检查3个GUID,这不是严重的过热吗?难道没有只在登录时检查的方法吗?因为cookie随每个请求一起返回,所以它添加的只是一个表的单一验证。在GUID上添加索引甚至可以加快速度。从技术上讲,它与用户记录相关,因此您可以在检查用户信息时检查它。我明白了。为每个页面加载向数据库添加请求并不是一个简单的问题,特别是如果网站每天交付100000个页面。但对于一个低流量的网站,这似乎是我需要的。干杯。当每天服务10万页时,您将需要更多具有额外负载平衡的服务器。即使如此,如果您已经必须访问用户数据,例如显示其全名,那么也可以查询前3个GUID。最糟糕的情况是,将三个字段添加到中以包含guid,分别命名为GUID1、GUID2和GUID3。添加第四个名为GUIDIndex的字段,该字段跟踪最后生成的GUID。(1、2或3)它并不完美,但可以包含到用户记录中,您已经需要显示他的姓名……但是添加一个更规范化的表,用附加的时间戳将GUID链接到用户ID将更实用。:-)因此,在一个名为GUIDs的表中有一个包含UserID、GUID和Timestamp的记录,并选择UserID链接到web用户的前3个记录。Cookie GUID必须在此集中。(还可以更容易地更改,例如更改为最后5个、最后10个或最后一个。)