【问题标题】:What is the proper way to delete cookies without logout in MVC4?在 MVC4 中无需注销即可删除 cookie 的正确方法是什么?
【发布时间】:2014-07-18 15:23:44
【问题描述】:

在我的情况下,结束(杀死)cookie 的正确方法是什么:

  1. 当用户第一次连接到网站时,它会将他/她连接到 Index。
  2. 然后用户输入用户名和密码。
  3. 它连接到他的帐户(“_Layout.cshtml”以标题开头 - 标题有导航菜单,可以查看一些结果)。
  4. 现在!如果用户在不单击注销的情况下关闭此选项卡或关闭浏览器,则会发生以下情况:当用户再次连接到网站时,它会将他/她重定向到索引(登录表单在哪里)显示标题的布局。因此用户可以通过点击导航菜单再次导航到他/她的帐户 - 无需再次登录。

我想做什么,当用户关闭他的标签或浏览器时,cookie 会结束(或被杀死),所以它会自动注销用户。

到目前为止,我的登录控制器集中只有这个:

if(ModelState.IsValid)
...
FormsAuthentication.SetAuthCookie(user.Username, false);

对于注销我有这个:

public ActionResult LogOut()
{
   FormsAuthentication.SignOut();
   return RedirectToAction("Index", "Home");
}

在网络配置中我设置了这个:

<sessionState mode="InProc" customProvider="DefaultSessionProvider">
  <providers>
    <add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" />
  </providers>
</sessionState>

:)

【问题讨论】:

  • 对于关闭选项卡上的清除会话跟随-stackoverflow.com/questions/1921941/…,您也可以使用-Session.Clear();会话.Abandon();还要检查是否对使用什么感到困惑-stackoverflow.com/questions/347377/…
  • 我认为 OP 希望在用户关闭浏览器时结束会话。
  • 停止使用单词会话。登录未使用会话。它使用 cookie
  • Valamas - AUS 正确,当用户关闭该网站的浏览器或选项卡时,会话必须结束
  • user3036342 感谢您的建议,我会更正我的问题

标签: asp.net asp.net-mvc-4 session kill


【解决方案1】:

ASP.NET MVC 是 RESTful/无状态的。这意味着您对会话如何工作的想法是不正确的(并且可以理解)。您正在使用表单身份验证,它使用 cookie,而不是会话状态。您使用的是为登录设置的 cookie。

一旦您理解了这个概念,您就可以开始为您想要实现的行为编写解决方案。

既然您知道它是如何工作的/要寻找什么,答案就在这里:How do I log a user out when they close their browser or tab in ASP.NET MVC?

【讨论】:

    【解决方案2】:

    既然您已经编辑了问题,现在要求Cookie,那么方式也保持不变,我通过这些步骤执行此操作;

    1) 用户关闭选项卡后,会立即提示一个弹出窗口,您可以在其中要求确认: 为此,请点击此链接: Prompt before tab close

    2) 在确认中,可以添加cookie清除逻辑。 (我希望你知道如何删除cookie,如果你最初添加cookie并为它们设置时间段,那么也要编写删除cookie的代码。

    让我知道这是否对您有帮助,因为它适用于我的应用程序。

    【讨论】:

    • 他不使用会话。他使用 FormsAuthentication.SetAuthCookie。关键字是“Cookie”。他需要实现一个 window.unload 以获取 JavaScript 以清除身份验证 cookie,将 FormsAuthentication 设置为不持久等,所有这些都在指向 SO 答案的链接中进行了解释
    • 好的,我已经编辑了答案,cookie的方式也一样。
    • 脚本好像有问题,这个解决方案怎么样:stackoverflow.com/questions/5122404/…
    • 此链接显示如何清除 cookie,但您将如何捕获标签关闭事件?你可能需要javascript,请检查脚本有什么问题,确保你不是复制粘贴,你需要了解后修改。
    猜你喜欢
    • 2015-03-12
    • 2013-12-11
    • 2014-02-11
    • 2013-10-16
    • 2012-10-01
    • 2016-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多