【问题标题】:.net MVC Application server time is different.net MVC 应用服务器时间不同
【发布时间】:2013-05-24 19:13:35
【问题描述】:

所以我的 web api 很大程度上依赖于用户当前的授权时间。问题是用户的当前时间几乎总是与服务器的日期时间不同。想知道是否有人可以就如何正确处理它给我一个建议。

我的第一个解决方案是将每次转换为 GMT 0400 时间。但似乎我必须存储用户的位置或类似的东西,我也不确定该怎么做。

谢谢!

【问题讨论】:

  • Moment.js 是一个很棒的 JavaScript 库,可以处理时区和其他日期时间函数。可能值得一看。
  • 我的问题是我需要这个用于 iphone 应用程序
  • 一种方法是始终将日期时间值保存为 UTC,并将它们以 UTC 格式发送到客户端或从客户端发送。然后在呈现给用户时在客户端上转换它们。 iOS api 应该能够进行转换。

标签: asp.net-mvc c#-4.0 datetime gmt datetimeoffset


【解决方案1】:

欢迎来到精彩可怕的本地化世界。没有简单的方法可以可靠地处理这类事情。这需要工作和 大量 测试。首先,您应该立即转储 .NET 的内置 DateTime 本地化。使用类似NodaTime 的东西。它会让您的生活变得更轻松(尤其是在测试您的本地化代码是否真正有效时)。

您将遇到的主要问题是没有可靠的方法来获取用户的时区服务器端。你有两个选择:

  1. 只需让用户明确选择他们的时区并将其存储在他们的配置文件中以供将来使用。这显然是最可靠的方法,但这意味着您要么需要强制用户输入此信息,要么在缺少该信息时求助于某些默认计划。

  2. 使用 Javascript (you can see the methodology here)。本质上,您可以使用 JS 设置隐藏字段的值或使用 AJAX 发送信息。显然,用户的客户端将需要 JS 支持并启用该支持(在 99.99% 的情况下相当安全,但仍有屏幕阅读器等不支持 JS,一些用户出于安全考虑更喜欢禁用 JS顾虑)。

但是,通常在授权中使用时间戳时,无论如何只有服务器时间很重要。我知道的唯一用途是创建摘要以防止重放攻击,但时间戳将根据服务器时间创建,然后根据服务器时间进行验证。您的用例有何不同?

【讨论】:

  • 好吧,我将时间戳附加到另一个签名并使用密钥对其进行加密。顺便说一句,此信息将来自 iphone 应用程序。但是,是的,要回答您的问题,这将是防止重放攻击。我实际上是想在他们每次使用该应用程序时询问他们。或者也许得到他们的位置或其他东西,然后再决定?想法?
猜你喜欢
  • 1970-01-01
  • 2018-12-05
  • 2014-12-12
  • 1970-01-01
  • 2016-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-01
相关资源
最近更新 更多