2009-10-05 106 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,因此會話等仍然會存在。