【问题标题】:Is it possible to persist session data on IIS Express cross different web projects in Visual Studio是否可以在 IIS Express 上跨 Visual Studio 中的不同 Web 项目保留会话数据
【发布时间】:2017-10-14 19:29:49
【问题描述】:

我们有一个现有的 ASP.NET Web 窗体应用程序,其中包含许多不同的 Visual Studio Web 项目。所有 Web 项目都配置为在相同的 localhost 根路径下运行(例如 http://localhost:12345/main/projectspecificname)。我们使用状态服务器来保存会话数据,cookieless 设置为 false。

这种方法在使用 VS2012 和 ASP.NET 开发服务器时运行良好。但是,当我们尝试从 VS2015 + IIS Express 运行相同的应用程序时,我们发现当不同 Web 项目之间发生重定向时,它无法保留会话数据。例如,当从 project1/login.aspx 调用 Response.Redirect("project2/index.aspx") 时,从 project2/index.aspx 中的 Page_Load 事件 我看到 session 变量丢失了它上面携带的所有数据(即 Session.Count == 0)。针对 ASP.NET 开发服务器的相同调试过程返回大于 0 的计数。同样,对于 IIS Express,所有不同的项目都配置为使用项目 URL,如 http://localhost:12345/main/projectspecificname

我搜索了一下,发现这篇 SO 帖子 IIS Express doesn't keep session data 提到了在 VS 中禁用浏览器链接的解决方案,但这不适用于我的情况。我只是想知道我们是否错过了一些设置,或者这种方法不适用于 IIS Express。任何帮助表示赞赏。

【问题讨论】:

  • 浏览器是否将会话 cookie 提供给两个站点?
  • @JohnWu 只有一个站点。在 http 请求中,我看到两个页面都发布了相同的会话 ID。

标签: c# asp.net visual-studio session iis


【解决方案1】:

我找到了解决这个问题的方法。看起来 IIS Express 将这些项目视为不同的 Web 应用程序,因此每次尝试连接到另一个项目时都会初始化会话。

默认情况下,Visual Studio 在 applicationhost.config 的 <site> 部分下为每个 Web 项目创建一个 <application> 节点,其中包含虚拟路径、应用程序池和物理路径等信息。删除您不想作为单独的 Web 应用程序运行的 Web 项目的 <application> 节点将使它们按照其物理路径指示在同一网站下运行。因此,可以在来自不同项目的页面之间正确维护会话数据它们现在被考虑在同一个应用程序中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-17
    • 1970-01-01
    相关资源
    最近更新 更多