2009-02-03 66 views
4

Web服務器可以在發送請求時確定用戶本地時間和時區嗎?是否可以通過Web請求確定用戶時間?

它可以完成使用JavaScript來捕獲它並將其發回服務器?

我的公司想跟蹤有多少用戶在辦公時間以外使用我們的網站(不,我真的不知道爲什麼!)。

謝謝。

+0

好問題;)+1 – Sergio 2009-02-03 17:23:53

+0

謝謝大家,我認識到,它依賴於用戶有他們的時鐘設置正確。 – 2009-02-03 17:27:17

回答

6

您需要將客戶端的JavaScript時間放入隱藏字段中,並假定其時鐘設置正確。上回發到服務器搶那場然後

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

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

打敗了我一拳:) – 2009-02-03 17:23:33

+0

你還必須假設他們還沒有禁用Javascript ... – 2009-02-03 18:04:39

2

你可以加載日起使用JavaScript的隱藏字段。

1

JavaScript的確是要走的路。

幸運的是網頁有lots of sample code you can useThis page似乎很全面。

應當指出的是,知道某人的電流偏移是一樣知道自己的時區,但它可能是足以讓你的目的:)

0

那麼你可以閱讀瀏覽器的本地時間使用JavaScript:

var now = new Date(); 

然後,你可以使用的XmlHttpRequest或隱藏的表單字段其發佈到服務器...

1

當然,你可以嵌入一個JS導出客戶端時間戳,並將其發送BA ck附加到其他某個請求上,但這是完全不可靠的,因爲用戶可以將其客戶時間設置爲他們想要的任何時間,並且需要第二個請求,這可能會有點濫用,或者技術上難以確保。許多實現都會通過對文本文件進行消除和遺忘AJAX請求或將單個空白像素圖像添加到頁面來實現此目的。

您可以嘗試根據第一個請求推導出一個類似的指標,並根據IP地址和GMT時間戳給出當地時間 - 但如果您還沒有IP /地理數據庫,則可能會很昂貴:)

2

您應該考慮反向DNS解析您現有的Web服務器日誌。然後,您可以使用地理編碼來猜測用戶的時區(以及相對於您的Web服務器時間的當地時間)。

您不需要編寫新的JavaScript代碼,編寫自定義服務器端代碼以記錄用戶時間,然後部署更新的網站。

這Perl腳本可能會是一個有用的例子:Perl Script that Does Bulk Reverse-DNS Lookups