gpt4 book ai didi

c# - 在网站上执行定时任务 - 最佳实践?

转载 作者:行者123 更新时间:2023-11-30 20:20:30 25 4
gpt4 key购买 nike

在网站 (asp.net) 环境中实现定时任务的最佳方式是什么?假设单击一个按钮会将其锁定 4 小时或一天。我将如何实现计算这 4 小时(或 1 天)然后解锁按钮的过程?

请记住这是一个网站:Do I

  1. 将当前日期时间戳保存到数据库(我以注册用户身份登录到该网站)
  2. 每次我访问带有按钮的页面时,我都会检索标记和持续时间
  3. 并计算我需要等待多长时间才能解锁按钮。

(并且可能实现一个显示在按钮附近的 JS(例如)倒计时计数器)

我认为使用 session 变量或 cookie 不是一个好主意,因为我可能会关闭我的网站或删除我的用户数据,从而失去上述内容。

最佳答案

既然你的要求是跨 session 支持这个,那么它肯定需要在数据库中。

数据库

添加一个 LockedUntilUtc 列,指示按钮应解锁的日期/时间。更好的是,命名该列以表示业务模型。也许您正在编写一个具有加薪审批流程的 HR 应用程序,并且在经理可以发布加薪以允许 HR 审查之前有一个强制性的 7 天等待期,并且按钮标记为“Publish Raise”在这种情况下我' d 将其命名为 PublishRaiseAvailableUtc

我处理过很多这样的场景,使用事件需要发生的日期/时间通常更简单。与保存计时器的开始时间并在每次需要进行计算时总是必须添加 7 天相反。

界面

将此值作为隐藏值随页面向下发送。使用您选择的框架编写 javascript,或者只是像 setTimeout 这样简单的东西,它会在那个时间点触发以解锁按钮。

不要担心试图想出一种复杂的方法来防止用户通过操纵 HTML 来解锁按钮。你应该假设他们可以解锁按钮,如果他们付出努力的话。鉴于该假设,我们需要服务器端逻辑来验证请求。

服务器后验证

当用户点击按钮时,POST 被发送到服务器,然后服务器端代码应该从数据库中检索 PublishRaiseAvailableUtc 的值(不要相信从隐藏的发布的值字段),并将其与服务器时间进行比较。 IE。服务器时间应大于 PublishRaiseAvailableUtc,前提是您确保比较的是 UTC 时间。

关于c# - 在网站上执行定时任务 - 最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36510740/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com