问题描述
我正在尝试检索用户的IP地址并将其分配给变量:
var ipAddress = Request.ServerVariables("HTTP_X_FORWARDED_FOR") ||
Request.ServerVariables("REMOTE_ADDR") ||
Request.ServerVariables("HTTP_HOST");
Response.Write(Request.ServerVariables("HTTP_HOST") + "<br />\n\n"); // produces "localhost"
Response.Write(Request.ServerVariables("REMOTE_ADDR") + "<br />\n\n"); // produces "::1"
Response.Write(Request.ServerVariables("HTTP_X_FORWARDED_FOR") + "<br />\n\n"); // produces "undefined"
Response.Write("ipAddress = " + typeof ipAddress + " " + ipAddress + "<br />\n\n"); // produces "ipAddress = object undefined"
我正在将JScript用于Classic ASP。我不确定此时该做什么。有人可以帮忙吗?
谢谢
解决方法
在JScript中使用ASP的情况与在VBScript中使用ASP的情况有些不同。
由于所有内容都是JavaScript中的对象,因此var ipAddress = Request.ServerVariables("HTTP_X_FORWARDED_FOR")
会获得对象引用而不是字符串值,因为像其他大多数Request
集合一样,ServerVariables
是{ {1}}个对象
因此,要使短路评估按预期工作,您需要使用值,而不是对象引用。
您可以使用IStringList
方法,如果有值(键存在),则返回Item
对象的字符串值,否则,它返回一个评估为{{ 1}}。
IStringList
,
我解决了获取IP地址的问题,而JScript的真实性/虚假性是一个完全而彻底的噩梦。
if (!String.prototype.isNullOrEmpty) {
String.isNullOrEmpty = function(value) {
return (typeof value === 'undefined' || value == null || value.length == undefined || value.length == 0);
};
}
var ipAddress = Request.ServerVariables("HTTP_X_FORWARDED_FOR") ||
Request.ServerVariables("REMOTE_ADDR") ||
Request.ServerVariables("HTTP_HOST");
function getIPAddress() {
try {
if (String.isNullOrEmpty(ipAddress)) {
ipAddress = Request.ServerVariables("HTTP_X_FORWARDED_FOR");
}
if (String.isNullOrEmpty(ipAddress)) {
ipAddress = Request.ServerVariables("REMOTE_ADDR");
}
if (String.isNullOrEmpty(ipAddress)) {
ipAddress = Request.ServerVariables("HTTP_HOST");
}
} catch (e) {
Response.Write("From getIPAddress(): " + e.message);
hasErrors = true;
} finally {
return ipAddress;
}
}
ipAddress = getIPAddress();
Response.Write("ipAddress = " + typeof ipAddress + " " + ipAddress + "<br />\n\n"); // produces "object localhost"