Global.asa имеет подпрограмму Session_OnStart
, но вы весьма ограничены в том, что вы можете делать в файле Global.asa, поэтому попытка вызвать API из Session_OnStart
может привести к проблемам.Вы также не можете использовать Session_OnStart
вне Global.asa или вызывать какие-либо функции или подпрограммы из Global.asa, если функции / подпрограммы также не закодированы в Global.asa.
Что мне нравится делатьэто создать файл global.asp
, который я использую для установки различных настроек приложения, включения классов для всего сайта и хранения важных функций и подпрограмм, которые необходимы по всему моему сайту.Затем я включаю global.asp
на всех страницах моего сайта asp.В global.asp
вы можете установить подпрограмму, которая вызывает API ipify.org и сохраняет результаты в виде переменных сеанса с помощью JSON-класса .Затем вы можете вызывать подпрограмму на каждой странице загрузки и выходить из подпрограммы, если API уже был вызван во время сеанса пользователя, или сделать новый вызов, если это новый сеанс.
global.asp
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<%
' Set some useful application settings, constants, other site-wide classes etc...
Server.ScriptTimeout = 20
Session.Timeout = 720
Response.Charset = "UTF-8"
Response.LCID = 1033
%>
<!--#include virtual = "/classes/jsonObject.class.asp" -->
<%
Sub ipify()
' Only call the ipify API once per session (but try 3 times)
' If session("ipify_called") is true or 3+ attempts have been
' made to call the API then exit the sub
if session("ipify_called") OR session("ipify_attempts") >= 3 then exit sub
' Assign a value of 0 to ipify_attempts if this is a new session
if isEmpty(session("ipify_attempts")) then session("ipify_attempts") = 0
Const api_key = "YOUR_API_KEY"
Const api_url = "https://geo.ipify.org/api/v1"
Dim rest : Set rest = Server.CreateObject("MSXML2.ServerXMLHTTP")
rest.open "GET", api_url, False
rest.send "apiKey=" & api_key & "&ipAddress=" & Request.ServerVariables("REMOTE_ADDR")
if rest.status = 200 then
Dim JSON : Set JSON = New JSONobject
Dim oJSONoutput : Set oJSONoutput = JSON.Parse(rest.responseText)
if isObject(oJSONoutput("location")) then
session("ipify_country") = oJSONoutput("location")("country")
session("ipify_region") = oJSONoutput("location")("region")
session("ipify_city") = oJSONoutput("location")("city")
session("ipify_lat") = oJSONoutput("location")("lat")
session("ipify_lng") = oJSONoutput("location")("lng")
session("ipify_postalCode") = oJSONoutput("location")("postalCode")
session("ipify_timezone") = oJSONoutput("location")("timezone")
' To prevent the api from being called again during this session
session("ipify_called") = true
else
' oJSONoutput("location") should be an object, but it isn't.
' The rest.responseText is probably invalid
session("ipify_attempts") = session("ipify_attempts") + 1
end if
Set oJSONoutput = nothing
Set JSON = nothing
else
' Unexpected status code, probably a good idea to log the rest.responseText
session("ipify_attempts") = session("ipify_attempts") + 1
end if
set rest = nothing
End Sub
' Call the ipify sub on each page load.
Call ipify()
%>
Используемый класс JSON: https://github.com/rcdmk/aspJSON
Не забудьте включить global.asp на другие страницы вашего сайта asp:
<!--#include virtual = "/global.asp" -->