У нас есть свой веб-сервер, или мы пишем dll для IIS сервера, или это проект UniGUI, и мы хотим ограничить действие ссылки 72 часми.
Таким образом можно ограничивать доступ к любому контенту, файлам, веб страницам и др.
Вот что у нас получится…
Естественно, это имеет смысл, если тот, контент, который должен загрузиться – будет на нашем хостинге, или мы его туда загрузили, как я это сделал в позапрошлом посте. Если после всех проверок, которые мы можем устроить для ссылки (ограничение по времени, по количеству кликов, пароль и прочее) – откроется редирект, то большого смысла это не имеет, так как после первого успешного прохождения проверок, контент будет беззащитен, точнее ссылка на контент.
Итак, нам нужно сгенерировать ссылку вида
1 |
http://localhost:8080/?param1=NoBlockMe¶m2=Value2&CreationDateTime=11.10.2016 22:00:22 |
с параметром
1 |
CreationDateTime=11.10.2016 22:00:22 |
На сервере, соответственно напишем следующее
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
procedure TWebModule1.WebModule1DefaultHandlerAction(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); ... var CreationDateTimeInLink:TDateTime; ... // Link Expired Check if (Request.QueryFields.Values['CreationDateTime']<>'') then begin CreationDateTimeInLink:= StrToDateTime( (Request.QueryFields.Values['CreationDateTime'] )); if HoursBetween(Now,CreationDateTimeInLink)>72 then begin Response.Content:='Link Expired.'+ '<p>Now='+DateTimeToStr(Now)+' </p>'+ '<p>CreationDateTimeInLink='+DateTimeToStr(CreationDateTimeInLink)+' </p>'+ '<p>Hours Between='+HoursBetween(Now,CreationDateTimeInLink).ToString+' </p>'+ '<p>Link LifeTimeLimited With=72 hours </p>' ; Exit; end; end else begin //Если самый умный стер параметр Creation Date Time Response.Content:='Access Denied.'+ '<p>Now= No Creation Date Time found</p>'; Exit; end; ... // if All Checks Ok - loading our Content... |
Вот наш результат
Чтобы привести к окончательному виду – нужно зашифровать вот эту часть при генерации ссылки
1 |
CreationDateTime=11.10.2016 22:00:22 |
и расшифровать её при чтении. Но это я уже оставлю вне данного поста. Думаю, задача несложная.