如何检测WSFederationSession是否已过期或结束

本文关键字:是否 过期 结束 WSFederationSession 何检测 检测 | 更新日期: 2023-09-27 18:29:25

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

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中写一些类似"You are烧尽"或"Session expired"的内容,这取决于结果,并在View中显示。

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

p.S对不起我英语不好。

如何检测WSFederationSession是否已过期或结束

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