例如,如果我想设置一个触发器,从当前时间开始每隔一小时触发一次,我该如何实现呢?
我用PHP写我的后端代码,本质上,如果一个用户登录,我给一个sessionID,如果没有活动每小时,那么会话超时。我认为这需要在PHP中实现,对吧?
使用cron
作业调度器运行脚本。
对于Windows,您可以尝试Windows任务调度程序。它提供类似的功能。
实际上,你不需要cron
来做这件事。
如果用户处于非活动状态一小时,您想要结束会话,那么您可以这样做。
- 当用户访问任何页面时,用当前时间更新
$_SESSION
变量。 - 当用户浏览到一个新页面时,检查
current_time - last_time > 1 hour
。如果是,结束会话并重定向。
您应该在cron脚本中这样做,而不是在PHP中。让PHP脚本运行几个小时通常是不好的做法。
这里不需要作业调度。当您给它们一个会话ID时,将会话ID存储在数据库中的一个表中。然后对每个请求执行此操作:
if session id row is found
if current time - last updated time > 1 hour
Do not allow access. Session is expired
else
update timestamp of session id row, setting it to the current time
allow access
end
end
本质上:每次用户请求某些东西时,您都可以更新数据库中该会话行的时间戳字段。如果当前时间-最后一次更新时间> 1小时,那么会话无效,您不应该允许访问。
如果你想安排一个作业去删除或以其他方式停用已过期的行,这是可以的,但你的会话管理方案不应该依赖于此。
也就是说,如果您没有有来滚动您自己的会话管理,那么就不要这样做。它充满了许多容易被忽视的小细节,并可能导致您的站点易受攻击。如果您仍然需要自己创建会话管理和身份验证,请查看OWASP中有关会话管理和身份验证的一些资料: https://www.owasp.org/index.php/Session_Management_Cheat_Sheet设置每小时运行一次的cron作业,或者设置自上次访问以来追溯计算需要计算的内容的代码。