在PHP中制作一个基于时间的触发器



例如,如果我想设置一个触发器,从当前时间开始每隔一小时触发一次,我该如何实现呢?

我用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作业,或者设置自上次访问以来追溯计算需要计算的内容的代码。

如果你能更详细地描述你想要完成的任务,那就太好了。

相关内容

  • 没有找到相关文章

最新更新