欢迎光临

木子屋

标题: 说说serverXMLHTTP对象与服务器的会话方式

作者: dnawo

日期: 2007-08-21 08:44 AM

分类: HTML/CSS

内容: 我们先来看一个例子：
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脚本来实现的真正原因吧。

+ 查看当前日志评论 (6)

登录

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 1.383 ms

返回

标题: 说说serverXMLHTTP对象与服务器的会话方式

你没有权限发表评论

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 1.383 ms

返回

标题: 说说serverXMLHTTP对象与服务器的会话方式

评论内容:

== dnawo 2008-02-12 08:47 PM ----

所以才必须用构造脚本

== sky717 2008-02-05 09:00 PM ----

在LOGIN.ASP 写一个 username=session("usernmae")
看index.asp这个页面能否读取login.asp的中的sessiuon("username")的值.如果可以就不用构造JS...可是我测试一N遍,还是不行的,,,

== xilou 2007-08-31 09:04 AM ----

如果在asp中能实现"序列化"的功能就可以实现

== dnawo 2007-08-31 08:46 AM ----

引用内容在服务器端使用 x.m.l.h.t.t.p 来对自己的服务器模拟用户请求，是对服务器资源的浪费。这也是a.sp的一大缺陷，脚本终究是脚本。dot n.e.t比它确实强多了。
好在用的地方也不是很多，呵呵。
评论不允许发网址，h.t.t.p直接发会被阻止。

== www 2007-08-30 09:46 PM ----

无聊!

== ashi 2007-08-30 07:21 PM ----

在服务器端使用 x.m.l.h.t.t.p 来对自己的服务器模拟用户请求，是对服务器资源的浪费。这也是a.sp的一大缺陷，脚本终究是脚本。dot n.e.t比它确实强多了。
请问，我到底那个字是违规的？不解，非要加上.才能发？

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 4.484 ms

返回