| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Дата истечения ключевого файла |
| Автор: Antony41 11.3.2010, 16:35 |
| Всем привет! Пишу ShareWare программу. Принцип следующий: на сервере хранятся ключевые файлы, в каждом ключевом файле, есть дата истечения ключа. Хочу сделать так что бы при запуске клиентской программы, проверялась текущая дата с какого либо сервера допустим NTP сервака, и как только его дата (в его часовом поясе) больше той которая в ключе, программа блокирует ключевой файл! Так вот проблема в часовых поясах например у меня уже будет 25 число а в москве еще только 24, так как разница во времени +2 часа, Как сделать такую проверку мне нужно узнать сколько времени сейчас у пользователя, лучший вариант это узнать по IP адресу например вот http://yandex.ru/yandsearch?text=%D0%BA%D0%BE%D1%82%D0%BE%D1%80%D1%8B%D0%B9%20%D1%87%D0%B0%D1%81&lr=57, но вдруг страницу на яндексе переделают что тогда? как вобще делаются подобные приложения, например антивирус доктор вэб, тоже как только истекает срок ключа сразу блокирует ключи. |
| Автор: kami 11.3.2010, 22:44 |
| Почему бы клиенту не спрашивать дату у своего сервера? причем, запрашивать в UTC формате? Потом - берем на клиенте LocalTime, вычитаем SystemTime (UTC). тем самым получаем на сколько время клиента разнится с "глобальным". Добавляем эту разницу к полученному от своего сервера и имеем реальное время часового пояса пользователя (в том случае, если он выставил его себе правильно), а не то, которое выставил себе клиент... Этим ликвидируются все неясности локальных настроек, устраняется зависимость от третьих сервисов, закрытых портов и система контроля будет приведена к единому знаменателю... |
| Автор: Antony41 12.3.2010, 11:18 |
| Огромное спасибо |
| Автор: Snowy 12.3.2010, 12:11 |
| NTP и SNTP протоколы передают дату и время по гринвичу. |
| Автор: darkmamba 13.3.2010, 12:53 |
| На компе клиента нельзя дату сверять. |
| Автор: Antony41 13.4.2010, 16:25 |
| Как же быть тогда просто ни как в голове не укладывается? Добавлено через 13 минут и 44 секунды Делать синхронизацию, каждый раз например каждые 2 часа, думаю неверный вариант, так как сервера синхронизации не всегда могут принимать и обрабатывать запросы, а тем более не всегда работают |
| Автор: Демо 13.4.2010, 17:14 |
| Почему бы вместе с датой в ключевом файле на сервере не хранить признак того, что ключ уже не действует? |
| Автор: Akella 14.4.2010, 12:57 |
| А если нет доступа у NTP серверу... |
| Автор: Antony41 15.4.2010, 04:05 |
| Все ключевые файлы будут хранится на сервере, в каждом ключевом файле будет первый параметр, день месяц или год, второй это значение. Например пользователь хочет активировать клиента, и вводит код активации, происходит обращение к ключевому файлу на сервере, читается параметр например Day 7 значит к текущей дате должно прибавиться 7 дней это и будет датой истекающего срока Думаю правильным решением будет отправить команду серверу, а сервер при активации возмет своё время, и при каждом обращении проверять. На сервере производить синхронизацию например каждый час, и если срок в ключевом файле истёк, то блокировать его) |
| Автор: former 15.4.2010, 07:45 |
| Antony41, а если твоя программа будет установлена на компьютере, который не подключен к Интернету в силу определенных причин? Или, например, человек поставил программу, активировал и отключил комп от сети. Ведь, приведенные тобой в пример др. веб, да и каспер, все равно реагируют на истечение ключа. Я бы сделал так: Создал бы службу Wind0w$ для своей программы, которая бы следила за всем этим. После установки использовал бы ее для активации программы на сервере. В активированном ключевом файле хранил бы временные метки активации и срока действия ключа, полученные с сервера. При запуске программы проверял бы запущена служба или нет и истечение срока действия ключа. При наличии активного подключения сверялся бы с сервером активации. Кроме того, служба следила бы за переводом календаря и часов пользователя. Дополнительно можно взаимно отслеживать изменение программы и службы пользователями (простенькая защита от перекомпилляции). |
| Автор: Antony41 15.4.2010, 08:54 |
| Конечно это всё верно, для моего варианта проще, так как программа не имеет смысла без соединения с интернетом. Спасибо! Теперь хоть знать буду как изобретать программы не связанные с интернетом. |