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

时间:2011-10-04 18:22:03

标签: php session timeout

例如,如果我想设置一个触发器来触发自当前时间以来经过的每一小时,我该如何实现呢?

我正在使用PHP来编写我的后端代码,基本上,如果用户登录,我会给出一个sessionID,如果每小时都没有活动,那么会话超时。我认为它需要在PHP中实现吗?

4 个答案:

答案 0 :(得分:4)

您可以使用cron作业计划程序来运行脚本。

对于Windows,您可以尝试Windows Task Scheduler。它提供类似的功能。


实际上,您不需要cron来执行此操作。

如果您想在一小时内处于非活动状态时结束会话,那么您可以这样做。

  • 当用户访问任何页面时,请使用当前时间更新$_SESSION变量。
  • 用户浏览新页面后,请检查current_time - last_time > 1 hour是否正确。如果是,请结束会话并重定向。

答案 1 :(得分:2)

你应该使用cron脚本,而不是PHP。让PHP脚本运行数小时通常是不好的做法。

答案 2 :(得分:1)

要么设置一个每小时运行一次的cron作业,要么设置代码,以追溯计算自上次访问以来需要计算的内容。

如果你要更详细地描述你想要完成的事情,那么它将会有所帮助。

答案 3 :(得分:1)

此处无需安排作业。当您为其提供会话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