【问题标题】:How to detect if WSFederationSession has expired or ended?如何检测 WSFederationSession 是否已过期或结束?
【发布时间】:2015-01-02 16:49:47
【问题描述】:

我在控制器中有几种方法:

public ActionResult Issue()
{
    var message = WSFederationMessage.CreateFromUri(HttpContext.Request.Url);

    // sign in 
    var signinMessage = message as SignInRequestMessage;
    if (signinMessage != null)
    {
        return ProcessWSFederationSignIn(signinMessage, ClaimsPrincipal.Current);
    }

    // sign out
    var signoutMessage = message as SignOutRequestMessage;
    if (signoutMessage != null)
    {
        return ProcessWSFederationSignOut(signoutMessage);
    }

    return View("Error");
}

这个问题对我来说最有价值:

private ActionResult ProcessWSFederationSignOut(SignOutRequestMessage message)
{
    FederatedAuthentication.SessionAuthenticationModule.SignOut();

    var mgr = new SignInSessionsManager(HttpContext, _cookieName);

    // check for return url
    if (!string.IsNullOrWhiteSpace(message.Reply) && mgr.ContainsUrl(message.Reply))
    {
        ViewBag.ReturnUrl = message.Reply;
    }

    return View("Signout");
}

一切正常,但是,有一些有趣的时刻。 如果我自己结束会话,或者会话只是过期,这两种情况都有效。很好,但实际上,我需要区分这些情况,在 ViewBag 中写下诸如“您被淘汰”或“会话已过期”之类的内容取决于结果并将其显示在视图中。

是否有某种方法可以检测会话过期的情况,还是应该采取不同的方法?

P.S 对不起,我的英语不好。

【问题讨论】:

  • 很遗憾,Thinktecture 选择在他们的库中使用“Session”这个词,因为它与 SessionState 完全无关。
  • 嗯,这并没有改变问题。我仍然需要以某种方式区分。
  • 我明确表示这个问题与 SessionState 无关,因为您已经有一个误解。我不知道答案,但我只是想确保您不会有 20 个人为您提供 SessionState 答案。
  • 是的。好吧,我想很明显,问题不在于 SessionState 仅通过查看代码示例,但是,是的,现在它更干净了。

标签: c# asp.net-mvc thinktecture-ident-server ws-federation


【解决方案1】:

既然你改变了话题,我会更新我的答案。我没有使用 WSFederatinSession 但也许您可以存储有关会话如何结束的信息(例如在 cookie 中)并在下一个请求期间(例如在全局 asax 中)读取此信息并做您想做的事情。

【讨论】:

  • 他不是在谈论那种会议
猜你喜欢
  • 2015-11-22
  • 2015-03-22
  • 1970-01-01
  • 1970-01-01
  • 2010-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多