【发布时间】:2014-04-04 21:35:21
【问题描述】:
如果公共应用程序池中的 ASP.NET 应用程序位于单个工作进程的不同线程中,它们能否共享会话信息?我的一个应用程序遇到了与没有其他应用程序所需的任何会话信息相关的问题,但我使用 Trace.axd 确认对每个应用程序的请求都使用相同的会话标识符。
【问题讨论】:
如果公共应用程序池中的 ASP.NET 应用程序位于单个工作进程的不同线程中,它们能否共享会话信息?我的一个应用程序遇到了与没有其他应用程序所需的任何会话信息相关的问题,但我使用 Trace.axd 确认对每个应用程序的请求都使用相同的会话标识符。
【问题讨论】:
我通过使我们的应用程序“无 cookie”解决了我们遇到的问题。 我更新了应用程序的 web.config 文件如下:
<!--sessionState mode="InProc" cookieless="false" timeout="30" /-->
<sessionState mode="InProc" cookieless="true" timeout="30" />
如果有人能解释为什么这行得通,我将不胜感激教育。
感谢所有提供建议的人。
【讨论】:
如果使用开箱即用的会话提供程序,ASP.NET 会话的范围是“在”应用程序内,因此即使会话 ID/键值看起来相同,每个应用程序也将拥有自己的会话。但由于对每个应用程序的请求都使用相同的会话标识符值,因此您似乎可以很好地实现自定义 SessionStateStoreProvider,它可以在两个应用程序中使用此标识符存储/检索数据。
您也可以查看Sharing sessions across applications using the ASP.NET Session State Service,但由于此方法涉及修改库存 SQL 会话存储提供程序的工作方式,您可能会冒对其他站点/应用程序产生溢出效应的风险。
【讨论】:
我认为这可能会有所帮助Sharing Aspnet Session across different domains 没有其他办法。 您不能在不同域之间共享会话。
还有另一种解决方案,可以通过查询字符串将所有数据传递到另一个域,以便它可以重建正确的会话值。
如果您选择 GET 选项,我个人会邀请您使用加密值以确保不可见。
【讨论】: