Session 如何使用基于座位的方法限制SaaS的应用程序使用?

Session 如何使用基于座位的方法限制SaaS的应用程序使用?,session,authentication,cookies,session-cookies,saas,Session,Authentication,Cookies,Session Cookies,Saas,我正在开发我的企业SaaS应用程序,我的一些用户希望按座位收费 我想知道如何确保访问确实是有限的。我现在可以看到,拥有相同登录名/密码的人同时从不同的IP地址、不同的用户代理登录,尽管该公司只为一个座位付费 从业务和技术角度来看,实现限制的最佳方式是什么?我不想太严格,同时我希望公司支付他们实际需要的座位数量 不要按用户代理过滤,我认为这太严格了,有些人可能安装了多种浏览器。按IP进行过滤也可能很棘手,一些用户可能有一个定期更改的动态IP 我的一个想法是强制用户安装浏览器扩展,浏览器扩展可以从操

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

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


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

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

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

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


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

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

假设PHP没有API来访问inspect会话,与当前的one-one想法不同的是:

  • 如果您还没有这样做,那么对于您发布的每个登录cookie,也要发布一个唯一的id(UUID将满足您的需要)
  • 将这些ID存储在某个地方(在java中,您可以将它们存储在应用程序上下文中,也许在php中,您需要一个db表来实现这一点——我不是php专家),并带有两个时间戳:“会话开始”和“最后一个活动”
  • 在每次请求时,在“上次活动”中记录当前时间戳
然后,当您收到一个新的请求时,计算有多少其他活动的请求

  • 上次活动>=当前会话开始
  • last activity>=现在-会话TTL
    (仅当无法及时删除过期会话时才需要)
这样你就可以知道有多少人坐了


注意:在剩余用户登录之前,以及在您看到其他会话中的活动之前,您不会注意到席位数量的违反–我看不到任何解决此问题的方法,因为您不知道席位何时变为空缺(好吧,你可能会说只有当会话过期时它才是空的,但这似乎不公平)。

你使用的是什么服务器端技术?(php/java/ruby/…)它是php,登录是用cookies实现的。通常使用a作为生成的标识符。