【问题标题】:Sharing ASP.NET SessionState between 2 apps with a StateServer shares the same SessionID but not key values, why?在具有 StateServer 的 2 个应用程序之间共享 ASP.NET SessionState 共享相同的 SessionID 但不共享键值,为什么?
【发布时间】:2011-08-02 02:34:45
【问题描述】:

我没有想法。我正在尝试在同一应用程序池下运行并使用mode="StateServer" 的两个.Net 4 应用程序之间使用相同的SessionState。我对这两个应用程序都进行了测试,结果很奇怪:SessionID 是共享的,但不是实际的会话项

它在内部是如何工作的?这是某处记录的安全限制吗?

屏幕截图 1 - 我正在 app#1 /SecureSessionTest.aspx 中设置会话项目(TestData 中的简单日期):

屏幕截图 2 - 我正在 app#2 /Apps/SecureSessionTest.aspx 中读取相同的会话项 TestData,但仅显示 SessionID:

我什至可以在同一个Session("key") 中设置不同的数据。奇怪!

他们的 web.config 中都有这个:

<machineKey validationKey='7D1094A0FC13B6656141916F69F6E25D0F112A6E94BD3EF5DAEFD9755A367C09607E7D76827AC5ACAD14456665C4E0966F632F09522475758A815A4045BF3F25'   decryptionKey='F0DF9FA0522E541FF246ADD8BC285A10E984444AE4361631' validation='SHA1'/>
<sessionState mode="StateServer" stateConnectionString="tcpip=localhost:42424" timeout="60" regenerateExpiredSessionId="false" cookieName="XXXXXXXX_ASP.NET_SessionId" />

有什么想法吗?非常感谢您的帮助!

卡尔

【问题讨论】:

标签: asp.net session-state stateserver


【解决方案1】:

StateServer 使用 SessionID cookie、机器密钥和应用程序名称的组合来关闭会话。

尝试让两个应用程序共享同一个应用程序池。

上一个问题可能很有启发性: Session State and Application Pool

(如果我最初的建议不起作用,请发表评论,我会更深入地挖掘)

【讨论】:

  • 正确的答案是你不容易。这很糟糕。
【解决方案2】:

@Ash 是对的,会话基于 sessionID(取决于机器密钥以及网站域)和应用程序名称,但我确实让它在跨应用程序目录的单个站点上工作(听起来像你的场景) - 请参阅我在state server session - cross appDomain?的回答

听起来您缺少的部分是在 global.asax 中显式设置应用程序名称(使用反射 - 我还没有找到配置设置)。我是在整个早上搜索设置后才发现的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-17
    • 2012-07-22
    • 1970-01-01
    • 1970-01-01
    • 2013-04-17
    • 2018-02-07
    相关资源
    最近更新 更多