我在控制器中有几种方法:
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中写一些像"你被烧掉了#34;或者"会话已过期"取决于结果并将其显示在视图中。
是否有某种方法来检测会话过期的情况,还是应该是不同的?
P.S抱歉我的英语不好。
答案 0 :(得分:-1)
由于您更改了主题,我将更新我的回答。我还没有使用WSFederatinSession,但也许你可以存储关于会话结束的信息(例如在cookie中)和下一个请求(例如在全局的asax中)读取这个inf并做你想做的事情。