我有一个在 IIS Express 服务器下的 Visual Studio 2013 中运行的应用程序。问题是 session 数据没有保存在页面之间,我发现以前页面不是空的空对象。如果我编译应用程序并将其部署在带有 IIS 的 Web 服务器上,它可以正常工作,所以它必须是带有 IIS Express 的东西。我搜索了文档文件夹中的配置文件,但真的不知道它是什么。
谢谢,
卢克
编辑 25/11:我正在使用 VS 2013 和 VS 2010 在同一台机器上调试代码,我发现代码的行为不同。在执行完后面的代码并构建页面后,在 VS 2010 中执行结束。在构建页面后的 VS 2013 中,我再次调用方法 context_BeginRequest(object sender, EventArgs e),它将应用程序重定向到起始页面,其中指令 Session.Clear() 清除 session 。现在的问题是:为什么要额外调用 context_BeginRequest 方法?为什么它重定向到起始页面而不是它当前所在的页面?谢谢,卢克。
最佳答案
我遇到了类似的问题。我的代码在生产服务器上运行良好,但是当我在测试机器上调试它时,保存和重定向之间的 session 将为空。
当我将 session 状态设置为 cookieless 时,<sessionState cookieless="true"
, session 变量将被保留。但这是不可取的,因为它将 session 名称添加到 url。
经过进一步检查,我注意到我的 system.web <httpCookies requireSSL="true" />
中有一行当我将其注释掉时,一切都照常进行。
问题是我的生产 IIS 服务器使用 https://托管代码,而我的测试 IIS Express 服务器仅使用 http。所以我不安全的 cookie 被丢弃了。
关于session-state - IIS Express 不保留 session 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26995371/