除了自己 Server/NTP Server 的時間外,其他的時間都不應該相信。

作手機 Client 的人應該常常遇到這種問題:User 因為某些原因(像是常常賴床起不來),把手機的時間調快了 5 分鐘。如果用的又是 OAuth 這類會有 expire 機制的 Protocol,就會遇到認證失敗的問題。

一般的解決方法是,利用一台「時間準確」的 Server,提供正確的時間。可以透過 HTTP Header(可以少一個 request),也可以透過一個 API,例如:http://emma.pixnet.cc/index/now。最近的 Google Authenticator 也有類似的機制。

不過,不只是 Client 會有這樣的問題。雖然 NTP 已經很普遍了,但總是會遇到因為設定錯誤,或是防火牆擋掉,或是 blah blah 等等的原因,導致 Server 時間跑掉的情形。當然,也有可能是軟體 Bug 造成的問題,導致 Server 傳回的時間是錯誤的。

最近就遇到這樣一個好玩的現象:寫 Parser 的時候,會看一下 Server 給的 Last-Modified 的 header 來判斷是否要 invalidate cache,結果發現有的 Server 會回傳未來時間…XD

所以,如果你的 Server 有跟 NTP Server 定期對時的話,應該使用自己 Server 的時間,其他任何外部來的時間都不應該相信,一定要檢查合不合理。

Share on FacebookShare on Google+Tweet about this on TwitterShare on LinkedInEmail this to someone