问题
I am trying to retrieve the user's IP address and assign it to a variable:
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"
I am using JScript for Classic ASP. I am unsure as to what to do at this point. Can anyone help?
Thanks
回答1:
Things work in ASP with JScript a little bit different than ASP with VBScript.
Since everything is an object in JavaScript, with var ipAddress = Request.ServerVariables("HTTP_X_FORWARDED_FOR")
you get an object reference instead of a string value because like most of other Request
collections, the ServerVariables
is a collection of IStringList
objects
So, to make that short-circuit evaluation work as you expect, you need to play with the values, not the object references.
You can use the Item
method that returns the string value of IStringList
object if there's a value (the key exists), otherwise it returns an Empty
value that evaluated as undefined
in JScript.
var ipAddress = Request.ServerVariables("HTTP_X_FORWARDED_FOR").Item ||
Request.ServerVariables("REMOTE_ADDR").Item ||
Request.ServerVariables("HTTP_HOST").Item;
回答2:
I solved the problem with obtaining the IP address, and the truthyness/falsyness of JScript is a complete and utter nightmare.
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"
来源:https://stackoverflow.com/questions/63748751/request-servervariables-returns-undefined-when-assigned-to-a-variable-yet