作者::dnawo 日期:2007-08-21
http://www.mzwu.com/article.asp?id=1039
我们先来看一个例子:
xmlhttp.asp代码:
Set Xmlhttp = Server.CreateObject("MSXML2.ServerXMLHTTP.3.0")
XmlHttp.Open "GET", " http://localhost/002.asp", false
XmlHttp.Send()
Response.Write(XmlHttp.ResponseText & "<br/>")
Set XmlHttp = Nothing
Response.Write(Session.SessionID)
%>
002.asp代码:
Response.Write(Session.SessionID)
%>
下边是运行结果的截图:
从运行的结果我们可以总结出:serverXMLHTTP对象每调用一次Open方法就将产生一次新的会话(第一行值每次都不同);serverXMLHTTP对象产生的会话是独立于页面的会话的(两行值始终不同)!
我们再看一个例子:
在上边例子的基础上将xmlhttp.asp代码更改为:
Set Xmlhttp = Server.CreateObject("MSXML2.ServerXMLHTTP.3.0")
XmlHttp.Open "GET", " http://localhost/002.asp", false
XmlHttp.Send()
Response.Write(XmlHttp.ResponseText & "<br/>")
XmlHttp.Open "GET", " http://localhost/002.asp", false
XmlHttp.Send()
Response.Write(XmlHttp.ResponseText & "<br/>")
Set XmlHttp = Nothing
Response.Write(Session.SessionID)
%>
再来看看运行结果:
因而上边的总结还得加个条件:在页面一个生存期内,serverXMLHTTP对象无论调用多少次Open方法都属于同一次会话(前两行值始终相同);在页面新的生存期中,serverXMLHTTP对象第一次调用Open方法时都将产生一次新的会话(第一行值每次都不同);serverXMLHTTP对象产生的会话是独立于页面的会话的(前两行和第三行的值始终不同)!
结论:serverXMLHTTP不能用于会员登录类似的模块中!
基于上边的总结,我们不难推断出:客户端无法使用由serverXMLHTTP对象产生的会话,也就无法与服务器端维持由serverXMLHTTP对象产生的会话!因为当我们使用Session("XXX")时,使用的都是页面的会话(除非有办法根据SessionID值来与服务器端维持会话)。
假如我们将serverXMLHTTP用于会员登录系统中,流程应是这样的:通过serverXMLHTTP将会员登录信息发到指定WEB页中进行验证,WEB页中验证成功的话将用Session对象记录用户登录状态,但是在其他WEB页中由于无法读取serverXMLHTTP对象创建的Session对象中的值,因而都只能是显示未登录状态!
我们也举一个简单的例子进行说明:
index.asp代码:
Set Xmlhttp = Server.CreateObject("MSXML2.ServerXMLHTTP.3.0")
XmlHttp.Open "GET", " http://localhost/login.asp?username=admin", false
XmlHttp.Send()
Response.Write(XmlHttp.ResponseText)
Set XmlHttp = Nothing
%>
<a href="other.asp" target="_blank">other.asp</a>
login.asp代码:
Session("username") = Request.QueryString("username")
Response.Charset = "GB2312"
Response.Write(Session("username") & "成功登录!")
%>
other.asp代码:
If Session("username") = "" Then
Response.Write("未登录!")
Else
Response.Write(Session("username") & "成功登录!")
End If
%>
结果图:
我想这也是为什么动网、oBlog、动易三方联合制订的PDO通行接口中对于会员登录和注销必需借助构造script脚本来实现的真正原因吧。