如何使用基于每个席位的方法限制SaaS的应用程序使用?

时间:2012-05-28 15:49:19

标签: session authentication cookies session-cookies saas

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

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

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

2 个答案:

答案 0 :(得分:0)

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

我的一个想法是强制用户安装浏览器扩展,浏览器扩展可以从操作系统上的某些内容生成唯一ID。也许使用硬盘卷号或Windows串行密钥,任何对该计算机而言都是唯一的。

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

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

答案 1 :(得分:0)

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

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

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

然后,当您收到新请求时,请计算其他活动有多少

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

那应该给你占用的座位数。

请注意,在剩余用户登录之后 看不出这个问题,因为你不确切知道一个座位何时空缺(好吧,你可能会说它只在会议结束时才会空缺,但这似乎不公平)。