Как определить, в каком часовом поясе находится пользователь веб-сайта (ASP.NET / MonoRail)? - PullRequest
1 голос
/ 10 декабря 2008

Итак, я устанавливаю cookie, срок действия которых истекает. Однако я хочу, чтобы это работало по всему миру. Поэтому мне нужно настроить дату истечения срока для часового пояса пользователя.

Итак, мне нужно выяснить часовой пояс пользователя на стороне сервера.

Есть ли способ сделать это в BCL? Например, полагаться на правильность установки CultureInfo.CurrentUICulture (что, как я считаю, MonoRail LocalizationFilter делает, но еще не проверил должным образом), а затем выяснить, в каком часовом поясе находится пользователь (а также учесть переход на летнее время там тоже) на основании чего?

В .NET 3.5 есть System.TimeZoneInfo, но мало документации о том, что такое идентификаторы - являются ли они ISO-кодами или как.

Или я собираюсь положиться на что-то на стороне клиента, чтобы выдвинуть эту информацию, например, из Date.getTimezoneOffset ()? Я бы предпочел избежать этого , так как, ну, в общем, клиентская ложь.

Ответы [ 3 ]

1 голос
/ 11 декабря 2008

Это очень просто. На сервере поставьте поле asp: hidden и заполните его текущей датой / временем сервера. На клиенте вычтите дату / время в скрытом поле из текущей даты на клиенте (новая Дата ()), и вы получите смещение от GMT. В обратном порядке это делается на сервере (например, новая Дата () в скрытом поле, вычитание времени сервера из значения скрытого поля).

1 голос
/ 12 декабря 2008

Помимо IP-геолокации (плохая идея по причинам, упомянутым другими) или JavaScript (также не очень хороший, потому что он слишком неоднозначен (из-за часовых поясов)), нет способа получить часовой пояс пользователя.

Ваш лучший вариант - позволить пользователю самостоятельно устанавливать часовой пояс через своего рода панель управления. Таким образом, вы точно знаете, в каком часовом поясе находится пользователь, и позволяете ему подтвердить часовой пояс.

Предполагается, что в будущем в браузеры будут добавлены некоторые замечательные функции геолокации, но до производства еще далеко.

Если вы решите использовать автоматическое обнаружение с использованием JavaScript, я бы порекомендовал эти сценарии, которые сканируют даты в системе пользователя, чтобы выяснить, когда происходит DST, а также возвращают смещение по Гринвичу (даже если оно находится в DST).

http://www.attackwork.com/BlogEntry/3/Time-zone-detect-and-ignore-Daylight-Saving-Time-DST/Default.aspx http://www.attackwork.com/BlogEntry/11/Daylight-Saving-Time-DST-Detect/Default.aspx

Все еще не очень хорошая идея, но она работает.

0 голосов
/ 10 декабря 2008

Нет действительно хорошего способа определить часовой пояс клиента. Вы можете отследить их IP-адрес, а затем попытаться прикрепить к нему местоположение, но это сложно и подвержено ошибкам (некоторые локаторы помещают все варианты использования AOL в Вирджинии)

Я бы сказал, что было бы лучше сделать это на стороне клиента.

...