【问题标题】:MVC force logout if Session object is empty如果 Session 对象为空,则 MVC 强制注销
【发布时间】:2017-03-21 08:33:19
【问题描述】:

我一直在环顾四周,但找不到我想要的确切内容,或者它比我想象的更复杂,这就是我问的原因。

就像我在 _LoginPartial.cshtml 中看到的那样:

@if (Request.IsAuthenticated)
{
        @try
        {
            <li>
                <a>@Html.Label("Hello " + Session["username"].ToString() + " !")</a>
            </li>
            <li><a href="javascript:document.getElementById('logoutForm').submit()">Disconnect</a></li>

        }
        catch (NullReferenceException)
        {

        <li>@Html.ActionLink("Connect", "Login", "Account", routeValues: null, htmlAttributes: new { id = "loginLink" })</li>
        }
}
else
{
        <li>@Html.ActionLink("Connect", "Login", "Account", routeValues: null, htmlAttributes: new { id = "loginLink" })</li>
}

有时,MVC 计算出 @if (Request.IsAuthenticated) 为真,而实际上,我的 Session 完全为空。

有没有办法将 MVC 身份验证与 Session 对象联系起来,或者至少,如果session["username"] 为空,则强制注销?

【问题讨论】:

  • 所以我可以完全忽略 resquest.Authentication 并且只使用会话对象来满足我的需要
  • Session 与身份验证无关 - Request.IsAuthenticated 只是查看当前线程是否具有 Principle 对象。您如何验证您的用户?
  • 感谢@TiesonT。正是您所说的回答了我的问题,Request.Authentication 与我想的真正的身份验证无关;它更像是“存在主要胎面”。所以我将使用 Session 来代替,这样我就可以自己处理显示和安全性。如果您关心接受答案,请在您的 cmets 中回答类似的内容,谢谢大家。
  • "...与真正的身份验证无关" - 嗯,什么? Session 只是存储状态的内存位置(除非您使用 Redis)。你有什么资格作为“真正的身份验证”?

标签: asp.net-mvc session razor


【解决方案1】:

我不知道为什么我不能早点想到它:

@if (Session["username"] != null)
{
    <li>
            <a>@Html.Label("Hello " + Session["username"].ToString() + " !")</a>
    </li>
    <li><a href="javascript:document.getElementById('logoutForm').submit()">Disconnect</a></li>
}
else
{
    <li>@Html.ActionLink("Connect", "Login", "Account", routeValues: null, htmlAttributes: new { id = "loginLink" })</li>
}

只要去掉Request.IsAuthenticated,直接使用session对象,如果是空的,你不希望ghost用户(空session用户)能够在网站上四处走动。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多