【问题标题】:disable access to an url if a div is present如果存在 div,则禁用对 url 的访问
【发布时间】:2013-12-04 19:35:45
【问题描述】:

我在我的 wordpress 网站中安装了一个倒数计时器插件,我想在倒数计时器结束之前禁用对特定 URL 的访问。

此时,我通过检查 div 是否具有特定类来知道倒计时何时结束。

这就是我使用 jquery 进行检查的方式:

jQuery( document ).ready(function() {
jQuery.fn.exists = function(){return this.length>0;}

if ( jQuery(".hasCountdown").exists()) {
// do something
}
});

但是,如果用户禁用了 javascript,这就不好了。

所以我需要通过 php 来完成。

L.E:我正在使用 WORDPRESS,我将拥有更多带有倒数计时器的页面。 欢迎任何建议。 谢谢!

【问题讨论】:

  • 我想一种方法是在倒计时结束后在 URL 中设置哈希或会话令牌。如果用户禁用了 Javascript,会话令牌将不会应用于 URL,并且 URL 将无效(您可以从 PHP 端检查。)由于它是一个短暂的倒计时,您可以给用户一个计时器在 URL 变为无效令牌之前单击它。
  • 我不认为我理解“具有特定类别”的逻辑。用户可以随时从任何 HTML 元素中删除一个类,并绕过 JS 计时器限制。

标签: javascript php jquery url conditional-statements


【解决方案1】:

您永远不应该依赖 Javascript 来阻止用户做他们不允许做的任何事情。用户可以通过多种方式规避 JS,以至于无法强制执行任何限制。

我建议您在服务器端进行重要检查。在这种情况下,我会推荐以下流程:

  • 在页面加载时,设置会话中的未来时间戳(链接应该开始工作的时间)
  • 向 HTML 添加常规链接
  • 点击链接后,触发对服务器端脚本的 AJAX 调用,以检查是否已达到时间戳。
  • 如果尚未到达,则向客户端发送响应,告诉 JS 停止(即不做任何事情)。
  • 如果已经到达,让服务器发回“OK”并让客户端跟随 URL(通过window.location)。

在所有情况下,您都需要检查目标 URL 上的时间戳,如果未达到时间戳,则会发出“拒绝访问”警告。

【讨论】:

  • 我喜欢这种方法,但我不知道它是否适合我,因为我会有更多页面,例如我现在会有一个页面倒计时 3 天,完成后我将有另一个页面倒计时 3 天等等......所以每次我添加新页面时应该更改链接开始工作的时间?
  • 如果用户直接在浏览器地址栏中输入 url 而不是点击链接怎么办?我需要阻止他也这样做......
  • 第二个问题:正如我所说,当您在浏览器中加载受限页面时,您需要始终检查时间戳。如果用户输入得太快(无论他们是使用链接还是直接进入),您都会发出警告并且不显示真实页面。简而言之,无论你实现 JS 部分,它都会受到保护。 JS 只是让用户感觉更好,所以如果他们无论如何都不允许去那里,他们就不会看到警告。
  • 你能给我一个简短的代码示例来说明如何使用它吗?
  • 第一个问题:您可以创建特定于页面的超时。但如果我们谈论的是 3 天,您可能无法使用会话,但理想情况下应该创建一些依赖于数据库的解决方案。只需创建一个包含(至少)三列的表:一列用于用户 ID,一列用于要访问的页面,一列用于时间戳。
【解决方案2】:

您可以使用 php 返回“打开 javascript”,然后在页面加载时将其替换为带有 javascript 的冷却块。

因此,如果用户在没有 js 的情况下加载您的页面,他会看到“打开 javascript”。

如果启用了 javascript,如果需要,此文本将替换为冷却块和 url。

【讨论】:

  • 我喜欢这种方法,但我不知道它是否适合我,因为我会有更多页面,例如我现在会有一个页面倒计时 3 天,完成后我将有另一个页面,另外还有 3 天倒计时,依此类推......所以每次我添加新页面时应该更改链接开始工作的时间?
  • @Alecs 一般而言,在所有情况下,您都需要检查目标 URL 上的时间戳,如果尚未达到时间戳,则会发出“拒绝访问”警告。 Steve 是最好的解决方案
【解决方案3】:

你可以有 2 个计时器,一个是 javascript,另一个是 php。 javascript 中的当前版本将保持不变,无需更改。 不同之处在于,当用户在 php 中加载页面时,您会在会话中保存一个时间戳。然后,在您要阻止的 URL 中,从会话中获取时间戳并检查是否已经过了足够的时间。如果没有,那么您可以阻止、重定向或采取任何您想要的操作。 用户不会有关于这个“其他”计时器的反馈,但你要确保用户是否激活了 javascript,或者即使用户通过浏览器控制台篡改了你的 html/javascript,他也无法在计时器结束之前访问您的“阻止”URL。 干杯。

【讨论】:

    猜你喜欢
    • 2014-09-13
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 2019-01-04
    • 1970-01-01
    • 1970-01-01
    • 2011-07-14
    • 2015-12-06
    相关资源
    最近更新 更多