我正在维护一个经典的 ASP 网站,最近我们想要在访问者来自一组特定网站时执行特殊的呈现操作。因此,在这些访问者必须通过才能访问我们网站的页面中,我放置了一行简单的行来设置 session 变量:
<!-- #include virtual="/clsdbAccess.cs"-->
<%
set db = new dbAccess
%>
<html>
<head>
...
<script language="javascript" type="text/javascript">
...
</script>
</head>
<body>
<%
Session("CAME_FROM_NEWSPAPER") = "your local newspaper"
...
%>
... html stuff ...
</body>
</html>
然后,在接下来的所有页面中,每当我需要放置我们不想向这些访问者显示的导航链接、菜单等时,我都会测试该 session 变量是否为“”,然后进行相应的渲染。
我的问题是,它似乎在开发中对我来说非常有效,然后我将其投入生产,有时它工作得很好,而其他时候则根本不起作用。有时 session 变量会被设置,有时则不会。其他一切都很好。但我们的客户在呈现给访问者的页面上看到不一致的结果,这是一个问题。我尝试从不同的电脑登录,并确认我得到了不同且不可预测的结果。问题是我无法随意重现它,并且无法对生产进行故障排除/跟踪。
目前,我已经解决了这个问题,只需创建具有特殊渲染的重复页面,并确保这些访问者前往那里。但这是一种黑客行为,最终将难以维护。
经典 ASP 中的 session 变量有什么特殊的或不一致的地方吗?有更好的方法来解决这个问题吗? TIA。
更新 我发现,当您第一次通过该页面访问该站点时, session 变量不会被设置。菜单和所有内容(在这些情况下应该不会出现)都会在第一次出现。然后,如果您返回并刷新登录页面,请再次浏览到同一页面,这次可以正常工作,之后也是如此。然后我删除了所有缓存、cookie 等,然后再次点击登录页面,再次进入我的页面:Bam,菜单(即没有 session 变量)。我创建了一个页面“sessionvars.asp”,在其中显示该变量的内容,果然,它是空白的。至少现在我可以随意重现问题,我应该能够在 Dev 上复制它并追踪它。
最佳答案
我在使用 VPS 服务器时遇到了同样的问题。您不能在经典 ASP 中将 Web Garden 与 session 变量一起使用。
转到 IIS 管理器 - Web 应用程序池并将工作进程数更改为 1。
如果您位于共享主机中,请要求此配置或更改为只有一名工作人员的应用程序池。
更多信息: http://bytes.com/topic/asp-classic/answers/54826-asp-sessions-web-gardens
问候
关于asp-classic - ASP 经典 session 变量并不总是被设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2638918/