【问题标题】:How can I destroy Session by SessionId from different web application in asp.net?如何通过 SessionId 从 asp.net 中的不同 Web 应用程序销毁 Session?
【发布时间】:2016-01-04 17:12:00
【问题描述】:

如何在网格视图上创建一个名为 Kill Session 的按钮来终止 C# asp.net Web 表单中用户的会话?

【问题讨论】:

  • 在堆栈中,您需要提供您尝试过的示例代码。您能提供您一直在尝试的示例代码吗?
  • 我们有一个 httpmodule,我们保存 sessionid,我有另一个应用程序列出所有会话,我们需要根据选择记录终止会话
  • 您不能从不同的 Web 应用程序中删除会话值;会话是安全的,只能在该特定浏览器会话中访问;

标签: c# asp.net session webforms


【解决方案1】:

天真的答案是让每个请求在任何处理之前检查此类待处理“会话终止”的持久队列或表,并有条件地放弃会话。

一个快速的优化是让应用程序全局监听(即从appstart)并主动监听外部队列,这样“kill requests”可以立即推送到它。然后,您可以在本地线程安全的数据结构中准备它们,从而不会减慢正常的 HTTP 请求。

您的会话管理应用程序只是将消息发送到该队列。

旁注:任何“服务总线”通常都可以。队列的持久性比队列更重要,因为您需要处理围绕应用程序重新启动而消息排队的场景。

正确的答案是直接与实际的会话处理程序进行通信。我不相信有任何标准 API 可以做你想做的事,所以这将取决于会话处理程序(并且可能取决于主机/服务器)。

【讨论】:

  • 这并不能真正回答问题。如何通过会话 ID 销毁会话?
  • @SpencerSullivan:正如我所提到的,如果会话的ID 与您在处理先前请求(或在任何其他上下文中)之前放入“终止队列”的会话匹配,则您可以 Abandon 会话.当时我似乎暗示没有标准的 API 可以直接使会话无效。我仍然可能是错的。
  • 明白。我们正在寻找的是真正实现您建议的这种魔力的实际代码。不是队列部分中的商店 ID。从远程进程中实际删除会话。我还没有看到这样做,如果你能证明这一点,相信你会得到相当多的分数。
  • @SpencerSullivan:当然;我在我之前的评论 (HttpSessionStateContainer.Abandon) 中链接到了我认为您想要的方法。应该很快就会明白为什么我建议使用异步机制来调用它(它只能放弃当前会话)。
  • 如果您只能放弃当前会话,那么按 id(非当前)放弃会话的队列是不现实的,并且会使您的答案无效。异步性与这个问题无关。问题是如何放弃不是当前会话(“用户”)的会话?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-27
  • 2019-05-02
  • 2011-06-25
  • 1970-01-01
  • 2017-09-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多