【问题标题】:Is it possible to determine the users time from a web request?是否可以从网络请求中确定用户时间?
【发布时间】:2010-10-05 05:09:00
【问题描述】:

是否可以在 Web 服务器上确定用户发送请求时的本地时间和时区?

是否可以使用 javascript 将其捕获并将其发送回服务器?

我的公司想要跟踪有多少用户在办公时间以外使用我们的网站(不,我也不知道为什么!)。

谢谢。

【问题讨论】:

  • 谢谢大家,我意识到这取决于用户是否正确设置了他们的时钟。

标签: javascript time


【解决方案1】:

您应该考虑对现有网络服务器日志进行反向 DNS 解析。然后,您可以使用地理编码来猜测用户的时区(以及相对于您的 Web 服务器时间的本地时间)。

您无需编写新的 JavaScript 代码、编写自定义服务器端代码来记录用户时间,然后部署更新的网站。

这个 Perl 脚本可能是一个有用的例子:Perl Script that Does Bulk Reverse-DNS Lookups

【讨论】:

    【解决方案2】:

    当然,您可以嵌入一个 JS 派生的客户端时间戳并将其发送回附加到​​其他请求中,但这完全不可靠,因为用户可以将其客户端时间设置为他们想要的任何时间,并且它需要第二个请求,这可能有点滥用,或者在技术上难以确保。很多实现都会通过对文本文件的 AJAX 请求进行触发后忽略,或向页面添加单个空白像素图像来实现这一点。

    您可以尝试根据第一次请求和地理定位 IP 得出类似的指标 - 位置和 GMT 时间戳为您提供本地时间 - 但如果您还没有 IP/Geo 数据库,这可能会很昂贵 :)

    【讨论】:

    • 关于回发的要点很好,除非我使用 AJAX,否则它不适用于初始请求。
    【解决方案3】:

    您可以使用 JavaScript 读取浏览器的本地时间:

    var now = new Date();
    

    然后您可以使用 XmlHttpRequest 或隐藏的表单字段将其发布到服务器...

    【讨论】:

      【解决方案4】:

      JavaScript 确实是要走的路。

      幸运的是,网络上有lots of sample code you can useThis page 看起来很全面。

      应该注意的是,知道某人的当前偏移与知道他们的时区一样,但对于您的目的来说可能就足够了:)

      【讨论】:

        【解决方案5】:

        您可以使用 JavaScript 将日期加载到隐藏字段中:

        var newDate = new Date();
        hiddenFieldName.value = newDate.toLocaleString();
        

        然后在回发到服务器时抓取该字段。

        【讨论】:

        • 帮自己一个忙,使用 newDate.toUTCString() 代替。 toLocaleString 为您提供用户语言的字符串。
        【解决方案6】:

        您需要将客户端的 JavaScript 时间放入隐藏字段,并假设他们的时钟设置正确。

        myTime = new Date() >> Tue Feb 03 2009 12:24:28 GMT-0500 (Eastern Standard Time)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-08-03
          • 2020-03-18
          • 1970-01-01
          • 2018-08-21
          • 2012-10-04
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多