【发布时间】: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