【问题标题】:ASP Classic GET request without multithreading没有多线程的 ASP 经典 GET 请求
【发布时间】:2009-10-05 10:51:38
【问题描述】:

我们谈论的是经典 ASP 而不是 ASP.NET!

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

我们可以编写一个 .NET 扩展来控制它,但我们正在寻找其他选项。我知道 .NET 的衰落是一件愚蠢的事情,但说来话长……

在 ASP 中有解决这个问题的方法吗?

【问题讨论】:

    标签: asp-classic get request


    【解决方案1】:

    看看Server.Execute 它允许动态(运行时)代码包含其他 ASP 文件。额外的好处是它被视为原始请求的一部分,因此 SESSION、COOKIE 在包含的文件中都可用。但是,主文件中定义的变量对包含的页面不可用。不过,您可以使用临时 Session 变量来规避这一点。

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

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

    【讨论】:

    • 我确实在一些博客上注意到了这个解决方案,我喜欢它。唯一的问题是修改大量文件以支持临时会话不是一个选项,因此它必须支持将变量传递给包含文件...
    • 我更新了一个关于如何设置和清理会话变量的示例,以表明它不是很侵入性。这将是一个简单的查找和替换所有包含的文件来引用会话。 (代码在 JScript 中,但仍然是经典的 ASP)
    • @Martijn:这假设在其他 asp 页面中维护会话变量没有其他正当理由。我使用会话变量/服务器执行方法,但由于我知道我设置了哪些变量,我只是在调用 server.execute 后将它们删除。
    • 真正的安东尼,我只是把它作为一个例子发布了,但可能应该提到它。
    • 我已经广泛使用了 Server.Execute,你不能依赖使用 Session 来存储临时的东西,因为如果用户同时访问多个页面,你可能会破坏它的价值。如果应用程序设计得很好,可以使用 Server.Execute,那么绝对不需要与 Server.Execute 隔离执行的代码位相互了解或传递东西
    【解决方案2】:

    您可以向自己的服务器发出请求,但发出请求的页面不需要在页面顶部的页面声明中启用会话:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-22
      • 1970-01-01
      相关资源
      最近更新 更多