经典 ASP/ASP.NET 应用程序变量
Posted
技术标签:
【中文标题】经典 ASP/ASP.NET 应用程序变量【英文标题】:Classic ASP/ASP.NET Application Variables 【发布时间】:2014-06-03 03:13:09 【问题描述】:我们继承了一个大小约为 40GB 的网站(主要来自用户提交的内容),其中混合了经典 ASP、内联 .Net 和与之相关的已编译 .Net。从技术上讲,有两个站点与此相关联,为了节省磁盘空间,我特意将 IIS 设置为让两个物理站点指向同一个文件夹,但使用独立的应用程序池来分隔工作进程。
我们遇到的问题是有时当您访问其中一个站点时,它似乎会以某种方式从另一个站点获取应用程序变量。从我在这里/Bing 上看到的所有内容来看,由于独立的应用程序池,工作进程应该是分开的,但我想知道经典的 ASP 是否会以某种方式抛弃它?考虑到所有可以想象的东西的混合(有大约 4,200 个物理 .asp/.aspx 文件,后者大多以 03_ 开始,因为这是在我参与之前选择开始迁移到 .Net 的方法),拥有这些更好吗?作为独立的站点和文件夹?我似乎无法弄清楚为什么应用程序变量会在中途被翻转,但这会导致许多问题 - 特别是因为连接字符串也是应用程序变量,并且这件事背后有两个数据库。
有什么建议吗?从应用程序变量/工作进程的角度来看,经典 ASP 的工作方式是否不同?
旁注 - 我知道应用程序变量在 .Net 世界中是一个糟糕的选择,尤其是对于连接字符串。我正在尝试纠正这个问题,但这是一项艰巨的任务,其中存在零文档或 cmets,并且这些东西在无处不在。
【问题讨论】:
听起来您在某处缺少应用程序池,请在经典 asp 站点中查找带有global.asa
文件的文件夹,这些文件夹应配置为 IIS 中的应用程序。
只有一个 global.asa 文件(和一个 global.asax),并且没有一个内部文件夹被配置为应用程序/虚拟目录。本质上,只有两个站点位于同一个物理目录结构之外,因此从这个意义上说,它相对简单。否则就变得很奇怪了。
那么在这种情况下,我会仔细检查经典的 asp 和 asp.net 站点是否共享同一个应用程序池。您可能还需要确保将经典 asp 应用程序池设置为“经典”托管管道模式,同时检查“框架”是否设置为“无托管代码”。
这些站点是经典 ASP/.Net 的混合体(两个站点从相同的物理文件夹结构中读取,尽管它们在 IIS 中作为站点和应用程序池是独立的)。这是开始升级到 .Net 的地方,然后被放弃了,所以现在网站上有大量经典的 ASP 和 .Net 文件一起使用。所以从这个意义上说,他们必须分享东西,所有这些都很好。我遇到的问题是有时来自一个站点(和应用程序池)的应用程序变量会重叠到另一个站点(和应用程序池)上,这没有意义,因为它们是独立的。
【参考方案1】:
除非在经典 ASP 站点和 NET 应用程序**之间有意交换,甚至在同一个站点上运行(!!!)但出于明显的原因将应用程序池分开,例如使用应用程序变量来存储值,否则没有办法经典的 asp 会将变量传递给 NET 应用程序。甚至会话变量也不在经典 ASP 和 NET 之间共享。必须有意在代码中完成。
例如,如果您使用 iframe 并将 url 字符串中的变量从 NET 应用程序传递到经典 ASP 页面或返回,或者只是从经典 ASP 页面调用 NET 应用程序并在 URL 字符串或诗句中传递变量。
** 如果您在同一域下运行,或者使用 cookie 在应用程序之间共享值。
【讨论】:
可悲的是,有。当您在 aspx 页面上登录时,它会将您重定向到一个经典的 ASP 页面,该页面会在查询字符串中获取验证所需的所有会话变量,然后将您重定向到您要去的任何地方。至少可以说这是一款非常特别的应用。 遗憾的是,您没有提供任何编码来支持您的主张。看看它是如何重定向的以及 aspx 传递给重定向 URL 的内容。配置了哪些应用程序以及应用程序池配置是什么。即使在最好的情况下,.NET 应用程序和经典 ASP 也无法从同一个应用程序池中运行。你错过了一些东西。 看看你必须做什么来实现你刚才解释的:msdn.microsoft.com/en-us/library/aa479313.aspx。阅读文章后,请检查您的网站,看看是否有类似的内容。 @digitall 还有一件事,因为您显然为您的网站使用相同的域,您是否费心查看 cookie?这些可能是在您的经典 ASP 和 ASPX 页面之间传递值,尤其是在登录页面和购物车上...... @digitall 在这种情况下,将此问题报告给 Microsoft,作为经典 ASP 和 NET 应用程序之间通信的新发现。它可能会将它们视为安全威胁。您排除:cookie - 不同的域、会话 - 因为它是经典的 ASP 和 NET,并且由于它位于不同的应用程序池中,因此也无法共享应用程序变量。剩下的要么是故意共享代码中的数据,要么是安全漏洞(漏洞)。以上是关于经典 ASP/ASP.NET 应用程序变量的主要内容,如果未能解决你的问题,请参考以下文章
兔子--html,js,php,ASP,ASP.NET,JSP的关系
求助:环境win2003 sp2+iis6.0+asp+asp.net2.0,死活访问不了ASP文件,html是可以访问的,详情见下面。