2016-09-27 61 views
0

让我提供了一个例子,使我的问题明确:如何跟踪到期

  • 我们有一个节点的应用程序,在这种情况下,我们的客户订阅。默认的是,我们订购一个新客户进行试用(例如说30天的试用期),在db记录中会有一个试用期限。
  • 试用期满后,我们想给客户转移到一个免费的计划

可以看出,后端需要认识到试用期结束时的试用期已结束。如何追踪到期日期?通常的做法是什么?

好吧,对于最后一个问题,我可以回答,也许一般的做法是在每次登录之前检查到期日并相应采取行动。另一种可能性是有一个类似cron的工作,发生在到期结束的确切时间。

哪个更好,如何处理类似cron的解决方案?

有什么建议吗?

回答

0

最好的方法是在登录过程中检查到期日期。我们通过这样做的好处是减少了数据库的开销,并且不需要外部脚本,也不需要触发器,这确保了更好的可维护代码。

+0

是的,但我不喜欢用户从未注销并始终刷新其会话的可能后门的想法,因此登录不会启动,用户可能会永远进入更高级别的计划。 –

+0

你有一个非常有效的点。在这种情况下,你几乎必须有一个请求过滤器来检查你的所有传入请求。这将是一个强大的解决方案。 – rushi

1

在大多数情况下,cron工作更可取。有两个原因:

  • 通常你会想其他动作与相关的到期,发送电子邮件到他们的帐户已过期的用户,例如,这将没有任何意义有已经发生时,他们抵达并登录。
  • 您会希望将您的数据库记录更新为其他用途,比如说拉统计数据或计费运行。

为了澄清上述第二项:假设你想发送电子邮件,宣布更改用户帐户(比如隐私政策更新),但你不想要的电子邮件发送给用户提供了一个过期账户。从数据库中选择所有活动账户要容易得多,而不需要检查到期日期。您可能会说,“这很容易添加到我的代码中”,但是:如果您有另一个使用此数据库的系统,或者通过RPC查询您的系统的系统,或者您只是shell并运行一些raw SQL?您突然需要在许多可能的系统(或者只是在您的代码库中的地方)复制到期检查代码,并且检查active==True要简单得多。

有关工作信息,我从另一个类似的问题简要stack overflow post