2009-10-05 46 views
1

我们谈论的是经典ASP而不是ASP.NET!没有多线程的ASP经典GET请求

让我们从头开始。我们正在使用ISAPI_Rewrite,并且我们想动态地提供我们的客户来控制URL的重写(给他们httpd.ini不是一个选项)。我们认为所有未知的url请求(我们在httpd.ini中定义这个请求)都由一个创建GET请求来选择url(客户创建key - > value table)的asp文件控制。现在,我们可以向另一个页面发出请求并打印输出,但我们无法向我们自己的服务器发出请求。据我所知,ASP不提供这个。

我们可以写一个.NET扩展来控制这个,但我们正在寻找其他的选择。我知道,拒绝.NET是一件愚蠢的事情,但它是一个很长的故事...

ASP是否有解决这个问题的方法?

回答

2

看看Server.Execute它允许动态(运行时间)代码包含其他ASP文件。另外一个好处是,它被视为原始请求的一部分,所以SESSION,COOKIE都可以在包含的文件中找到。但是,主站中定义的变量对于包含的页面不可用。尽管如此,你可以使用临时的Session变量避开这个问题

Session("variable") = "value"; 
Server.Execute(url); 
Session.Abandon; 
Response.end; 

Session.Abandon将清除所有会话变量,您可能需要单独清除它们。

+0

我在一些博客上注意到了这个解决方案,我喜欢它。唯一的问题是,修改大量文件以支持临时会话不是一个选项,因此它必须支持将变量传递给包含文件... – FrEaKmAn 2009-10-05 12:06:55

+0

我更新了一个关于如何设置和清理会话变量的示例,以显示它不是非常侵入。这将是一个简单的查找并替换所有包含的文件来引用会话。 (CODE是在JScript中,但仍然是传统的ASP) – 2009-10-05 13:53:46

+0

@Martijn:这假定没有其他有效的原因来维护其他asp页面中的会话变量。我使用Session变量/ Server Execute方法,但由于我知道我设置了哪些变量,我只需在调用server.execute后将其删除。 – AnthonyWJones 2009-10-06 07:34:53

0

你可以请求自己的服务器,但发出请求的页面需要不在页的声明已经启用会议就在页面的顶部:

每个页面锁定会话对象和它阻止你向自己的服务器发出请求。如果你声明你不打算在调用脚本中使用会话,那么它将不会锁定它,并且可以使用XMLRequest再次运行它,并在查询字符串上传递你喜欢的内容,发布数据和会话cookie,因此会话等仍然会存在。