如何检测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对不起我英语不好。
由于您更改了主题,我将更新我的答案。我还没有使用WSFederatinSession,但也许你可以存储关于会话如何结束的inf(例如在cookie中),并在下一个请求期间(例如在全局asax中)读取此inf并做你想做的事情。