在单个应用程序池和工作进程中的应用程序之间共享ASP.NET会话信息

时间:2014-04-04 21:35:22

标签: asp.net iis-7.5

如果公共应用程序池中的ASP.NET应用程序位于单个工作进程中的不同线程中,它们是否可以共享会话信息?我的一个应用程序遇到了与其他应用程序没有任何会话信息相关的问题,但我使用Trace.axd确认对每个应用程序的请求都使用相同的会话标识符。

3 个答案:

答案 0 :(得分:1)

ASP.NET会话的范围是"在"应用程序,如果使用开箱即用的会话提供程序,因此即使会话ID /键值看起来相同,每个应用程序也将拥有自己的会话。但由于对每个应用程序的请求使用相同的会话标识符值,因此您似乎可以很好地设置实现可以在两个应用程序中使用此标识符存储/检索数据的自定义SessionStateStoreProvider

您还可以查看Sharing sessions across applications using the ASP.NET Session State Service,但由于此方法涉及修改库存SQL会话商店提供商的工作方式,因此您可能会对其他网站/应用程序产生溢出效应。

答案 1 :(得分:1)

我通过使应用程序“无cookie”来解决我们遇到的问题。 我更新了应用程序的web.config文件,如下所示:

<!--sessionState mode="InProc" cookieless="false" timeout="30" /-->
<sessionState mode="InProc" cookieless="true" timeout="30" />

如果有人可以解释为什么这是有效的,我会很感激教育。

感谢所有提出建议的人。

答案 2 :(得分:0)

我认为这可能是有帮助的Sharing Aspnet Session across different domains没有别的办法。 你不能在不同的域之间共享会话。

还有另一种解决方案可以通过查询字符串将所有数据传递到另一个域,以便它可以重建正确的会话值。

就个人而言,如果您选择GET选项,我会邀请您使用加密值以确保不会显示。