C# 是否有办法通过其ID访问另一个会话并读取它';s会话变量?

C# 是否有办法通过其ID访问另一个会话并读取它';s会话变量?,c#,asp.net-mvc,C#,Asp.net Mvc,此应用程序正在负载平衡的环境中运行。它使用SQL数据库作为会话存储。该应用程序很简单,没有自己的数据库 我已经创建了一个端点,该端点将从另一个知道SessionId的内部服务器调用。我希望这个端点能够通过SessionId而不是从当前会话获取会话变量 我知道我可以创建一个新的数据库来实现这一点,但这太过分了,因为它只有一个表,其中有两个字段、SessionId和一个与之相关的值。我甚至可以把这个表放到当前会话数据库中。如果可能的话,我会尽量避免添加数据库连接代码 是否有方法访问当前会话以外的其他

此应用程序正在负载平衡的环境中运行。它使用SQL数据库作为会话存储。该应用程序很简单,没有自己的数据库

我已经创建了一个端点,该端点将从另一个知道SessionId的内部服务器调用。我希望这个端点能够通过SessionId而不是从当前会话获取会话变量

我知道我可以创建一个新的数据库来实现这一点,但这太过分了,因为它只有一个表,其中有两个字段、SessionId和一个与之相关的值。我甚至可以把这个表放到当前会话数据库中。如果可能的话,我会尽量避免添加数据库连接代码


是否有方法访问当前会话以外的其他会话的变量?

我可能错了,如果我是-否决票;会话状态存储基于数据库(而不是内存)这一事实并不会改变
IHttpSessionState
的工作原理。我怀疑你是否能够做到这一点,我怀疑你是否真的想做到:你根本无法从一个完全不同的上下文访问一个完全不同的上下文。这样做有很多潜在的问题(线程安全、会话状态实现更改时的问题等等)。您的web应用程序可能不知道会话状态存储

例如,如果我只是使用会话状态,并且直接在IIS中配置了会话状态,那么应用程序线程就无法知道它在数据库中,这会立即出现一个问题:如果我决定在没有DB支持的会话状态的情况下运行同一个应用程序,该怎么办?无需更改应用程序代码,只需重新配置IIS即可。它可能会引入意外的行为和/或运行时错误

将cookie设置为已知会话ID的建议(在注释中)是唯一的“出路”,但从安全角度来看,这不是最佳的


然而,对于缓存提供程序来说,您尝试实现的似乎是一项合适的工作。您可以使用from将数据库用于缓存。然后,您可以使用前面提到的
SessionId
作为缓存标识符之一。

我可能错了,如果我是-downvote;会话状态存储基于数据库(而不是内存)这一事实并不会改变
IHttpSessionState
的工作原理。我怀疑你是否能够做到这一点,我怀疑你是否真的想做到:你根本无法从一个完全不同的上下文访问一个完全不同的上下文。这样做有很多潜在的问题(线程安全、会话状态实现更改时的问题等等)。您的web应用程序可能不知道会话状态存储

例如,如果我只是使用会话状态,并且直接在IIS中配置了会话状态,那么应用程序线程就无法知道它在数据库中,这会立即出现一个问题:如果我决定在没有DB支持的会话状态的情况下运行同一个应用程序,该怎么办?无需更改应用程序代码,只需重新配置IIS即可。它可能会引入意外的行为和/或运行时错误

将cookie设置为已知会话ID的建议(在注释中)是唯一的“出路”,但从安全角度来看,这不是最佳的


然而,对于缓存提供程序来说,您尝试实现的似乎是一项合适的工作。您可以使用from将数据库用于缓存。然后您可以使用前面提到的
SessionId
作为缓存标识符之一。

如果您知道会话id,为什么不能将请求设置cookie设置为该会话id并正常处理它?不确定您希望如何设置代码。需要从另一个会话中查找变量的端点通过代码从内部服务器命中。这就是为什么每个请求上下文将有一个不同的(新的)会话。Cookie根本不可能。“通过代码从内部服务器命中”和“Cookie根本不可能”是非常令人困惑的组合。。。您是否试图直接反对SQL?我不知道“内部服务器”对“在LB环境中运行的应用程序”发出什么样的请求,这是一个MVC应用程序。LB环境需要SQL数据库支持的会话配置。内部服务器正在运行另一个通过HTTP发出服务器端请求的MVC应用程序。Cookie不现实,因为此请求中的客户端不是浏览器。如果是在单个服务器上,缓存甚至静态变量都可以工作。这就是为什么我希望有一种方法可以访问服务器端的其他会话。如果您知道会话id,为什么不能将请求设置cookie设置为该会话id并正常处理?不确定您希望如何设置代码。需要从另一个会话中查找变量的端点通过代码从内部服务器命中。这就是为什么每个请求上下文将有一个不同的(新的)会话。Cookie根本不可能。“通过代码从内部服务器命中”和“Cookie根本不可能”是非常令人困惑的组合。。。您是否试图直接反对SQL?我不知道“内部服务器”对“在LB环境中运行的应用程序”发出什么样的请求,这是一个MVC应用程序。LB环境需要SQL数据库支持的会话配置。内部服务器正在运行另一个通过HTTP发出服务器端请求的MVC应用程序。Cookie不现实,因为此请求中的客户端不是浏览器。如果是在单个服务器上,缓存甚至静态变量都可以工作。这就是为什么我希望有一种方法可以访问服务器端的其他会话。SqlCacheDependency似乎很有趣。我会进一步调查的。谢谢SqlCacheDependency似乎很有趣。我会进一步调查的。谢谢