所以我的 web api 很大程度上取决于用户当前的授权时间。问题是用户的当前时间几乎总是与服务器的日期时间不同。想知道是否有人可以就如何正确处理它给我一个建议。
我的第一个解决方案是每次都转换为 GMT 0400 时间。但似乎我必须存储用户的位置或类似的东西,我也不确定该怎么做。
谢谢!
所以我的 web api 很大程度上取决于用户当前的授权时间。问题是用户的当前时间几乎总是与服务器的日期时间不同。想知道是否有人可以就如何正确处理它给我一个建议。
我的第一个解决方案是每次都转换为 GMT 0400 时间。但似乎我必须存储用户的位置或类似的东西,我也不确定该怎么做。
谢谢!
欢迎来到精彩可怕的本地化世界。没有简单的方法可以可靠地处理这种类型的东西。这需要工作和大量测试。首先,您应该立即转储 .NET 的内置 DateTime 本地化。使用类似NodaTime的东西。它会让你的生活更轻松(尤其是在测试你的本地化代码是否真正有效时)。
您将遇到的主要问题是没有可靠的方法来获取用户的时区服务器端。你有两个选择:
只需让用户明确选择他们的时区并将其存储在他们的配置文件中以供将来使用。这显然是最可靠的方法,但这意味着您要么需要强制用户输入此信息,要么在缺少该信息时求助于某些默认计划。
使用 Javascript(您可以在此处查看方法)。本质上,您可以使用 JS 设置隐藏字段的值或使用 AJAX 发送信息。显然,用户的客户端需要 JS 支持并启用该支持(在 99.99% 的情况下相当安全的赌注,但仍有屏幕阅读器等不支持 JS 并且一些用户更喜欢禁用 JS 出于安全考虑担忧)。
但是,通常在授权中使用时间戳时,无论如何只有服务器时间很重要。我知道的唯一用途是创建摘要以防止重放攻击,但时间戳将根据服务器时间创建,然后根据服务器时间进行验证。您的用例有何不同?