gpt4 book ai didi

c# - 为什么我不能使用 StateServer 在 2 个 Web 应用程序之间共享 session 状态?我错过了什么?

转载 作者:可可西里 更新时间:2023-11-01 08:37:57 28 4
gpt4 key购买 nike

我无法让 2 个相同的 ASP.NET MVC 应用程序使用 Session StateServer 共享同一个 Session。我尝试这样做的原因是我们最终将在需要共享相同状态的 3 个 Web 服务器上部署这个应用程序。我们需要使用 StateServer,因为我们正在尝试尽量减少将数据库用于非数据相关存储。

设置:

我已将相同的代码库部署到 http://localhost/ App1http://localhost/ 应用2

两者都有相同的 Web.Config 文件,内容如下:

<system.web>
<sessionState mode="StateServer"
cookieless="false"
timeout="20"
stateConnectionString="tcpip=127.0.0.1:42424" />
//stateConnectionString="tcpip=192.168.1.52:42424" /> // also doesn't work
<machineKey
validationKey="8B9F68D0CC730F6F046D0173021C34B1A0D9A01C21D8E4D4A7A1DFF38332DEE8CBBAFEA503C18776614EE9D4F7EEA7E5D2D5571630547D822485A27B1EF53AC1"
decryptionKey="60009563EFCFC594FD1BC46684943AA398EE70412A624B2EB488BBB071F15ECF"
validation="SHA1" decryption="AES" />

我用了this tool to generate these machine keys

测试:

我将以下内容放入我的一个 Controller 中以测试它是否正常工作:

ViewData["mode"] = requestContext.HttpContext.Session.Mode.ToString();

string timestamp = DateTime.Now.ToString();
if (requestContext.HttpContext.Session["timestamp"] == null)
{
requestContext.HttpContext.Session["timestamp"] = timestamp;
}

ViewData["timestamp"] = requestContext.HttpContext.Session["timestamp"].ToString();
ViewData["realtime"] = timestamp;

在 View 中:

<p>
Mode: <%= ViewData["mode"].ToString() %>
</p>
<p>
Time: <%= ViewData["timestamp"].ToString() %>
</p>
<p>
real time: <%= ViewData["realtime"].ToString() %>
</p>

结果:

对于这两个部署,当页面首次加载时,我可以看到模式是 StateServer 并且时间戳设置为与实时值相同的时间。但是,如果这有效,则只有第一页应该具有与实时值相同的时间。第二次页面加载应该从 StateServer 读取,因为时间戳值不再为空,并显示该时间值。但是,它会再次显示实时值。

当我刷新页面时,时间戳保持不变,实时值始终在更新。这表明时间戳正在保存到 session 中,但是两个部署的时间戳值在本应相同时始终不同,因此这表明 session 未被共享。

有人可以指出我是否做错了什么,或者我是否需要做其他事情才能使它正常工作?谢谢

最佳答案

默认情况下 session 不能在不同的应用程序之间共享。据我所知,您有两个不同的应用程序 App1App2,它们在单独的虚拟目录中运行,甚至可能在单独的应用程序池中运行,因此不要期望在它们之间共享 session .

一如既往有workarounds你可能会觉得有用。如您所见,它使用 hack(反射)来规避 ASP.NET 团队设计者不暴露某些类和属性的决心,并使我们作为开发人员的生活变得困难。

关于c# - 为什么我不能使用 StateServer 在 2 个 Web 应用程序之间共享 session 状态?我错过了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3292359/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com