代码之家  ›  专栏  ›  技术社区  ›  Mike K

不总是设置ASP经典会话变量

  •  2
  • Mike K  · 技术社区  · 16 年前

    我有一个经典的ASP网站,我正在维护,最近我们想做特殊的渲染动作,如果访问者来自一个特定的网站集。因此,在这些访问者必须通过的页面中,我放置了一行设置会话变量:

    <!-- #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变量。菜单和所有东西(在这种情况下应该不会出现)第一次出现。然后,如果您返回并刷新登录页面,请再次浏览到同一个页面,这一次是有效的,之后也是如此。然后我删除了所有的缓存、cookies等,再次点击登录页面,进入我的页面:Bam,菜单(即没有会话变量)。我创建了一个页面会话变量.asp“在我显示该var的内容时,果然是空白的。至少现在我可以随意复制这个问题,我应该可以在Dev上复制并跟踪它。

    2 回复  |  直到 16 年前
        1
  •  2
  •   Carlos Devia    15 年前

    转到IIS管理器-Web应用程序池并将工作进程数更改为1。

    如果您在共享宿主中,请请求此配置,或使用ohly one worker更改应用程序池。

    更多信息: http://bytes.com/topic/asp-classic/answers/54826-asp-sessions-web-gardens

    当做

    www.imaginacolombia.com

        2
  •  1
  •   NobodyMan    16 年前

    另一种情况是某些用户会话可能超时。例如,假设用户转到设置会话变量的页面(会话超时是10分钟)。然后他们出去喝杯咖啡或是聊个不停。30分钟后,用户单击页面上的链接,此时会话被放弃。您可以尝试增加会话超时时间,看看这是否会改善这种情况。

    一种解决方法是——而不是会话方法——检查客户机的 referring url (HTTP_referer),看看它是否是你认为是“本地报纸”的url之一。这可以说是更多的工作(有些浏览器隐藏了推荐人无论如何),但可能会产生更好的结果。见鬼,你可以尝试两种方法的结合:会话和推荐。

    推荐文章