注销时不会放弃会话

Posted

技术标签:

【中文标题】注销时不会放弃会话【英文标题】:Session is not abandoned on logging out 【发布时间】:2015-02-10 12:38:12 【问题描述】:

我正在开发一个 MVC 4 应用程序,我是 MVC 的新手。我有一个用于注销的 Actionlink,但是当我单击它时,不会调用 ActionResult 方法。 谁能告诉我哪里出错了?

_Layout.chtml

<nav>
    <ul id="menu">
        <li>@Html.ActionLink("Home", "Index", "Home")</li>
        <li>@Html.ActionLink("About", "About", "Home")</li>
        <li>@Html.ActionLink("Contact", "Contact", "Home")</li>
        @if (Session["LoggedinUser"] != null)
            <li>@Html.ActionLink("LogOut", "Login", "Home")</li>
    </ul>
</nav>

HomeController.cs

[HttpPost]
public ActionResult LogOut()

    FormsAuthentication.SignOut();
    Session.Clear();
    Session.RemoveAll();
    Session.Abandon();
    return RedirectToAction("Index", "Login");

【问题讨论】:

注销是 POST,因此您无法使用 actionlink 触发它,即 GET 是的,将 POST 更改为 GET 有效!谢谢.. 【参考方案1】:

代替

@Html.ActionLink("LogOut", "Login", "Home") 试试 @Html.ActionLink("LogOut", "LogOut", "Home") 。

这对你有用..

【讨论】:

【参考方案2】:

您的参数顺序错误,因此您实际上是在调用Login 操作:

public static MvcHtmlString ActionLink(this HtmlHelper htmlHelper, 
    string linkText, string actionName, string controllerName)

应该是

@Html.ActionLink("Whatever Text You Want", "LogOut", "Home")

【讨论】:

我认为她的参数顺序正确,他只是错误地写了登录而不是注销 @AlexArt。我只是按照我所看到的进行,而我所看到的显然是参数顺序错误。 绝对将这个答案与 Ibrahim ben Salah 在问题中的评论结合起来 - 您对[HttpPost] 的操作不会响应 GET 请求。根据您所拥有的,您应该能够删除该属性,并且在修复参数顺序后您会没事的。 此更改适用于将 HttpPOST 更改为 HttpGET。谢谢!我很感激

以上是关于注销时不会放弃会话的主要内容,如果未能解决你的问题,请参考以下文章

注销后 Cookie 会话不会失效

phpmyadmin sso 不会在注销时删除现有会话

会话验证过滤器在会话过期时注销用户

MVC 在同一用户登录后注销所有活动会话

Keycloak node.js 适配器不会在注销时使 connect.sid 会话 cookie 无效

会话到期时网站通常如何自动注销用户?