【问题标题】:How do I recover a Session based on the SessionID?如何根据 SessionID 恢复 Session?
【发布时间】:2015-02-17 02:15:03
【问题描述】:

上下文是: 我需要将 SessionID(将被加密)发送到应用程序,然后应用程序保存会话 ID,并在下一次查询时应用程序将 SessionID 发回给我,以便我可以使用存储的 Session 变量。

所以HttpContext.Current.Session.SessionID 给了我当前的 SessionID。

但是...如何根据 SessionID 恢复 Session?

附:我知道这是这个未回答问题的重复:How do I get a session by SessionID in C# 因此,如果无法从 SessionID 检索 Session,我会问是否有其他方法可以实现这一点。

【问题讨论】:

  • “恢复”是什么意思? HttpContext.Current.Session 当前会话。
  • 你的意思是你想基本上缓存每个会话?这是 WebAPI 还是 MVC
  • 为什么不能使用HttpContext.Current.Session?
  • @keitn - 我猜 OP 不知道如何从应用程序(不是 Web 浏览器)发送带有 cookie 的请求,并使用非持久会话状态(或低过期状态)在长时间后检索会话时间。
  • 最简单的方法是修复应用程序以正确发送 cookie...否则请阅读 customs session state provider 以连接到现有会话状态。

标签: c# asp.net-mvc session


【解决方案1】:

据我所知,没有可用于加载基于会话 ID 的会话的公共 API(我也询问过 question here)。您可以hack it using reflection,但这只有在您的网站处于完全信任的环境中并且您可以接受使用反射的性能影响时才有效。

正如 cmets 中所指出的,会话状态通常由 cookie 驱动(默认情况下名为“ASP.NET_SessionId”)。如果您将“应用程序”(我假设您的意思是远程应用程序)的请求中的 cookie 传递给服务器,那么您只需在服务器端调用 HttpContext.Current.Session 即可访问会话状态。您只需将 cookie 添加到应用程序请求的标头中即可。

但是,我不认为会话状态是您在场景中所追求的持久性机制。与处理 cookie 相比,将您的状态存储为持久格式(例如文件或数据库)并使用 GUID 或其他唯一标识符根据通过 URL 传入的 ID 来访问它会更有意义。

正如 Alexi 指出的那样,另一种可能性是构建自己的 session state provider,然后将自己的后门放入其中以访问原始数据,但要实现这一目标需要相当多的工作。

【讨论】:

  • Cookie 绝对是必经之路。我们只是 Web 服务和移动应用程序之间的中间件。自定义会话状态提供程序将是最后一个选项,但仍然是一个有效选项,事实上这就是我的问题的答案,但我觉得 cookie 会让我的生活更轻松。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-02
  • 1970-01-01
  • 2019-05-19
  • 1970-01-01
  • 2012-04-29
相关资源
最近更新 更多