此应用程序在负载平衡环境中运行。它使用SQL数据库作为会话存储。该应用程序很简单,没有自己的数据库。
我创建了一个从另一个知道SessionId的内部服务器调用的端点。我希望此端点能够通过SessionId而不是当前会话来获取会话变量。
我知道我可以创建一个新的数据库来执行此操作,但它会有点过分,因为它只有1个表,包含2个字段,SessionId和与之相关的一个值。我甚至可以把这个表放在当前的会话数据库中。我试图避免在可能的情况下添加数据库连接代码。
有没有办法访问当前会话以外的其他会话的变量?
答案 0 :(得分:0)
我可能错了,如果我是 - downvote;会话状态存储是基于数据库的(而不是内存中)这一事实不会改变IHttpSessionState
工作原理。我怀疑你能做到这一点,我怀疑你真的想要:你根本无法从不同的上下文访问一个绝对独立的上下文。这样做有很多潜在的问题(线程安全,如果会话状态实现发生更改等问题)。您的Web应用程序可能不知道会话状态存储。
例如,如果我只使用会话状态并在IIS中直接配置会话状态,则应用程序线程无法知道数据库中是否存在问题:如果我决定运行该问题该怎么办?没有DB支持的会话状态的应用程序? IIS重新配置不需要更改应用程序代码。它可能会引入意外行为和/或运行时错误。
将cookie设置为已知会话ID的建议(在评论中)是唯一的“出路”,但从安全角度来看,它不是最佳的。
但是,您尝试实现的内容似乎是缓存提供程序的正确工作。您可以使用SqlCacheDependency中的System.Web.Caching将数据库用于缓存。然后,您可以使用前面提到的SessionId
作为缓存标识符之一。