Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > 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
Конечно это всё верно, для моего варианта проще, так как программа не имеет смысла без соединения с интернетом. Спасибо! Теперь хоть знать буду как изобретать программы не связанные с интернетом.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)