【问题标题】:Making a time based Trigger in PHP在 PHP 中创建基于时间的触发器
【发布时间】:2011-10-04 18:22:03
【问题描述】:

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

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

【问题讨论】:

  • 嗨,@lilzz。你试过什么?我们需要一些上下文。
  • 您需要更详细地描述您要完成的工作。
  • 在 PHP 中为给定会话实现超时检查。会话开始后,需要每 1 小时检查一次是否不活动。
  • @lilzz:查看我的更新答案。
  • cleanup php session files 的可能副本 - 只需确保您的会话文件在 30 分钟不活动后被删除。你不需要触发器。

标签: php session timeout


【解决方案1】:

您使用cron 作业调度程序来运行您的脚本。

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


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

既然你想在用户一小时不活动的情况下结束会话,那么你这样做怎么样。

  • 当用户访问任何页面时,将$_SESSION 变量更新为当前时间。
  • 一旦用户浏览到一个新页面,检查current_time - last_time > 1 hour。如果是这样,请结束会话并重定向它们。

【讨论】:

【解决方案2】:

您应该使用 cron 脚本来执行此操作,而不是在 PHP 中。让 PHP 脚本运行数小时通常是不好的做法。

【讨论】:

    【解决方案3】:

    这里不需要作业调度。当您为他们提供会话 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

    【讨论】:

    • 本示例中易受攻击的“小细节”之一(取决于您的安全要求):会话可以无限期开放。
    【解决方案4】:

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

    如果你能更详细地描述你想要完成的事情,那将很有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多