0

我正在开发我的企业 SaaS 应用程序,我的一些用户希望按每个席位收费。

我想知道如何确保访问确实受到限制。我现在可以看到具有相同登录名/密码的人同时从不同的 IP 地址、不同的用户代理登录,即使公司只为一个席位付费。

从业务和技术角度实施限制的最佳方式是什么?我不想太严格,同时我希望公司为他们实际需要的座位数量付费。

4

2 回答 2

0

使用 IP 似乎是个坏主意——局域网中的人(通常)都拥有相同的 IP。

假设 PHP 没有 API 来访问与当前不同的检查会话 - 一个想法是:

  • 如果您还没有这样做,对于您发出的每个登录 cookie,还要发出一个唯一的 ID(UUID 将服务于您的目的)
  • 将这些 id 存储在某处(在 java 中,您可以将它们存储在应用程序上下文中,也许在 php 中,您需要一个 db 表 - 我不是 php 专家),以及两个时间戳:“会话开始”和“最后一个活动” "
  • 在每次请求时,在“最后一个活动”中记录当前时间戳

然后,当你收到一个新请求时,计算有多少其他活跃用户

  • last activity >= current session start
  • last activity >= now - session TTL(仅在无法及时修剪过期会话时才需要)

这应该给你占用座位的数量。

请注意,直到多余用户登录之后,您才会注意到席位数量的违规,直到您在其他会话中看到活动 - 我看不到任何解决此问题的方法,因为您不知道确切的时间席位变得空置(好吧,您可能会说它只有在其会话到期时才空置,但这似乎不公平)。

于 2012-05-28T16:43:09.810 回答
0

不要按用户代理过滤,我认为这太严格了,有些人可能安装了各种浏览器。按 IP 过滤也可能很棘手,一些用户的动态 IP 可能会定期更改。

我的一个想法是强制用户安装浏览器扩展,浏览器扩展可以从操作系统上的某些东西生成一个唯一的 ID。也许使用 HDD 卷号或 Windows 序列号,任何该计算机独有的东西。

拥有此唯一 ID 后,每次用户登录时在后端跟踪中使用它。如果用户超过一定数量的席位,您可以阻止用户帐户或先与他们联系。

允许用户有一定的自由度也是一个好主意,这样如果他们有一个座位,那么后端可能会允许一个月有 2 个座位(滚动期),以防用户购买新电脑或安装新硬盘。

于 2012-05-28T16:10:30.553 回答