【问题标题】:Classic ASP Sessions being lost when going to a new page转到新页面时丢失经典 ASP 会话
【发布时间】:2016-08-16 10:49:38
【问题描述】:

我在 Internet 上浏览了很长时间,但我找不到经典 ASP 问题的答案。我的任务是让一个旧的 Classic ASP 解决方案在本地工作,但事实证明这很有挑战性,因为我对应用程序或经典 ASP 本身知之甚少。

我已设法设置调试,似乎发生的是会话变量已设置,但是当导航到新页面时,会话变量已打开,并且 sessionid 字段已增加。我认为这是因为没有设置 cookie。我在 Chrome、IE、Firefox 和 Opera 上都试过这个,每次都遇到同样的问题。

我的本​​地计算机和托管实时应用程序的 Web 服务器之间的服务器设置差异使这变得特别困难,因为我无法轻松比较 IIS 配置。我的本地机器安装了 IIS 7.5,而网络服务器安装了 IIS 版本 6。我也尝试过创建自己的应用程序,这里的会话在请求之间正常工作,这让我相信这是 IIS 配置问题或应用程序问题。我还在 Session.Abandon 发生的任何地方放置了断点,并且这些断点没有被命中

任何帮助将不胜感激

亚历克斯

【问题讨论】:

  • navigating 是指表单提交还是重定向?
  • 我尝试过刷新、通过链接导航和表单提交,它们都导致会话数据丢失

标签: session iis cookies asp-classic session-cookies


【解决方案1】:

Worker 进程的数量呢?默认情况下,每个应用程序池应该有 1 个工作进程。如果有更多工作进程 - 它们之间的会话也可能丢失。

在 IIS 中检查处理您网站的应用程序池中的以下设置:“最大工作进程数”。

【讨论】:

    【解决方案2】:

    您需要创建一个方法来检查会话并在您在应用程序中使用的每个 asp 页面上调用该方法。

    Sub CheckSession()
        If Session("LoginID") = "" Then
            Response.Redirect "../Login.asp"
        End If
    End Sub
    

    然后在每个asp页面调用CheckSession()方法,

    Call CheckSession()
    

    在您需要与会话绑定的 asp 页面的顶部,您还需要包含声明 CheckSession() 方法的 asp 文件。

    因为我创建了一个 SharedPost.asp 页面并在其中创建了所有方法并将其包含到我的另一个 asp 页面中。

    <!--#include file="../Shared/SharedPost.asp" -->
    

    【讨论】:

    • 干杯 - 我已经知道会话正在被清除,因为我在第一个包含文件中设置了断点,该文件在每次页面加载时都会被命中。通过在 Session 上进行监视,看起来 SessionId 与上一个请求不同,因此甚至特定变量都不同,它根本不会记住整个 Session。我感觉这是某种配置问题 - 应用程序在 IIS 中具有复杂的结构
    【解决方案3】:

    您的应用程序可能会抛出错误和/或回收应用程序池,或者您使用的链接/表单/重定向正在跨越域边界(x.com 到 y.com,然后返回到 x.com)并因此创建错误域上的会话。

    有关一些常见的故障排除方法,请参阅:https://blogs.msdn.microsoft.com/akshayns/2008/09/29/common-reasons-for-the-session-loss-issue-in-asp-net-applications/

    【讨论】:

      猜你喜欢
      • 2014-09-20
      • 1970-01-01
      • 1970-01-01
      • 2012-10-25
      • 1970-01-01
      • 2014-10-14
      • 1970-01-01
      • 2023-03-25
      • 2014-12-31
      相关资源
      最近更新 更多