我的代码表现得很奇怪

时间:2014-07-02 02:07:20

标签: sql ms-access vbscript

所以...这就是...... 我通过天空连接,它有动态IP,我的IP偶尔也会改变。我在家里经营一个小网站,该网站有三个来自我的ip camera的视频流。现在,每次ip更改时我都不想更新我的代码,所以我的文件顶部有这一位:

Response.Buffer = True
Dim objXMLHTTP, xml    
Set xml = Server.CreateObject("Microsoft.XMLHTTP") 
xml.Open "GET", "http://myip.dnsomatic.com/", False  
xml.Send
externalIP = xml.responseText  
Set xml = Nothing

我的ip已经改变了一段时间,但上面的代码正在返回我的旧IP!当我访问http://myip.dnsomatic.com/时,它显示了正确的新IP。只要我没有重新启动机器,情况就会持续存在。我想知道为什么代码表现如此?为什么它不能立即返回正确的IP?

还有一件事我不明白......我的网站有一个评论功能,用户可以发表评论。我的addComment.asp文件检查会话是否先到期:

if Session("userID") = "" or Session("username") = "" then 
   Response.Write("<SCRIPT LANGUAGE=JavaScript>")
   Response.Write("alert('Your session has expired...');")
   Response.Write("window.location.href='index.html';")
   Response.Write("</SCRIPT>")
end if

如果会话未过期,则会将注释添加到数据库并更新页面,但如果会话已过期,则不会返回index.html,而是INSERT INTO语句,我用它将注释插入到相应的表中,抛出错误!该声明低于上面的代码,理论上它永远不应该被执行。有任何想法吗?

我还应该补充一点,如果以下方式修改了上述代码:

if Session("userID") = "" or Session("username") = "" then 
   Response.Redirect("index.html")
end if

在这两种情况下(会话已过期但未过期)一切正常,但我想要一条消息告诉用户弹出的过期时间。这是INSERT INTO语句,我认为它不包含任何错误:

conn.Open connStr
commText = "INSERT INTO Messages (ID, 
                                  userID, 
                                  messageDate, 
                                  messageText) 
              VALUES (" & (recordsQty + 1) & ",
                      " & currentUserID & ",
                      #" & Now & "#, 
                      '" & commentText & "')"
conn.Open connStr
conn.Execute commText
conn.Close()

1 个答案:

答案 0 :(得分:1)

这只是一个理论,但我猜你得到了陈旧的结果,因为它被缓存在某个地方。未经测试的代码,但我相信这将解决您的问题,如果它是缓存:

Set xml = Server.CreateObject("Microsoft.XMLHTTP")
xml.Open "GET", "http://myip.dnsomatic.com/", False
xml.setRequestHeader "If-None-­Match", "some-random-string"
xml.setRequestHeader "Cache-Co­ntrol", "no-cache,max-age=0"
xml.setRequestHeader "Pragma",­ "no-cache"
xml.Send

至于重定向后继续出错,你所犯的错误并不是将服务器端与客户端代码执行分开。除非中止,否则服务器端代码将继续执行到最后。 Response.Redirect(String)中止执行,但不是特别干净:http://msdn.microsoft.com/en-us/library/t9dwyts4%28v=vs.110%29.aspx

修改代码以便它可以一直持续到最后,这样做要好得多。例如,这可能不是很漂亮,具体取决于您拥有多少代码,但将非重定向路径放在if Session(“userID”)...块的else块中可以正常工作。


编辑:我没有代表发表评论,但我不相信这是一个DNS缓存问题,因为myip.dnsomatic.com只是返回它所服务的客户端的IP,那么,我认为,你直接连接到。如果是这种情况,DNS(除解析myip.dnsomatic.com名称之外)根本不参与。