如果Session对象为空,则MVC强制注销

时间:2016-11-07 21:09:14

标签: asp.net-mvc session razor

我一直在四处寻找,我找不到我想要的东西,或者它可能比我想象的更复杂,这就是我要问的原因。

就像我在_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)为真,而实际上,我的会话是完全空的。

有没有办法将MVC身份验证与Session对象链接起来,或者至少在session["username"]为空时强行退出?

1 个答案:

答案 0 :(得分:-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并直接使用会话对象,如果它是空的,您不希望幽灵用户(空会话用户)能够绕过该网站。