Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 无法注销身份MVC 5(有时)_Asp.net Mvc_Cookies - Fatal编程技术网

Asp.net mvc 无法注销身份MVC 5(有时)

Asp.net mvc 无法注销身份MVC 5(有时),asp.net-mvc,cookies,Asp.net Mvc,Cookies,我们的网站有时会决定您无法注销,大多数情况下都能正常工作。下面是这件事的基本细节。我在远程服务器和本地测试中看到了Chrome和IE的这个问题,使用VS进行本地测试时,它甚至认为这是一个问题,需要足够长的时间来尝试使用clear/About强制删除会话,并将所有cookie日期设置为-1天。没有帮助 注意,只要我执行F12并清除域的cookies,问题就会停止,用户将注销。我已经更改了登录。。。正如您看到的,没有参数,没有变化。同样,这种情况有时也很难测试 看起来系统无法从浏览器中删除cooki

我们的网站有时会决定您无法注销,大多数情况下都能正常工作。下面是这件事的基本细节。我在远程服务器和本地测试中看到了Chrome和IE的这个问题,使用VS进行本地测试时,它甚至认为这是一个问题,需要足够长的时间来尝试使用clear/About强制删除会话,并将所有cookie日期设置为-1天。没有帮助

注意,只要我执行F12并清除域的cookies,问题就会停止,用户将注销。我已经更改了登录。。。正如您看到的,没有参数,没有变化。同样,这种情况有时也很难测试

看起来系统无法从浏览器中删除cookies,但我看不出原因,在不同的浏览器中,这样做更有意义

我知道这一联系,似乎很相似:

建议尝试什么或去哪里看,谢谢

Login
var user = await UserManager.FindAsync(model.Email, model.Password);
AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie);
AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = true }, await user.GenerateUserIdentityAsync(UserManager));

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult LogOff()
{
   AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie);
   return RedirectToAction("Index", "Home");
}
编辑:
查看Chrome F12 Cookies。如果我只是删除.AspNet.ApplicationCookie并尝试导航,我将被登录。按注销选项仍不起作用。我看到cookie在14天后过期,并且日期不变。似乎默认系统没有尝试使cookie过期,或者也不允许。这个的源代码可用吗?

我遇到了同样的问题,在使用ASP.NET MVC 5和Google Chrome一段时间后无法注销,我刚刚在帖子中找到了解决方案:。这个问题现在已经解决了,但我需要再测试一段时间,因为它是间歇性问题。这篇文章中有人确认他们的问题也得到了解决。所以,试试看

我在使用ASP.NET MVC 5和Google Chrome一段时间后无法注销时也遇到了同样的问题,我刚刚在帖子中找到了解决方案:。这个问题现在已经解决了,但我需要再测试一段时间,因为它是间歇性问题。这篇文章中有人确认他们的问题也得到了解决。所以,试试看

我想我知道这里的问题是什么-虽然我不知道如何解决它,但有时asp.net标识的文档是如此混乱

我有完全相同的症状。关键问题是,您是否使用SecurityStampValidator验证并在需要时重新创建cookie

是的,并且我的设置为从我的Startup.auth开始非常频繁地进行验证:

Provider = new CookieAuthenticationProvider
{
    // Enables the application to validate the security stamp when the user logs in.
    // This is a security feature which is used when you change a password or add an external login to your account.  
    OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, User, int>(
        validateInterval: TimeSpan.FromMinutes(1), 
        regenerateIdentityCallback: (manager, user) =>
        {
            return user.GenerateUserIdentityAsync(manager);
        },
        getUserIdCallback: id => (int.Parse(id.GetUserId()))
        ),
},
因此,假设您有类似的代码-如何重新创建。简单-登录,点击应用程序上的一个页面,然后等待定义的validateInterval失效-所以对我来说,等待1分钟。1分钟后,注销。繁荣我没有注销

现在,这里的问题是GenerateUserIdentityAsync方法在注销发生后立即重新创建身份验证cookie。我已经通过日志记录验证了这一点_authenticationManager.SignOutDefaultAuthenticationTypes.ApplicationOkie;在我的注销操作中,cookie被重新生成。Doh

如何修复-显而易见的是增加validateInterval,但这会影响安全性-如果有人登录到两台计算机,并更改其密码,我希望两个帐户都能很快注销-这就是它的作用


所以,这可能就是原因。很抱歉,我不能提供一个很好的解决方案:

我想我知道这里的问题是什么-虽然我不知道如何解决它,但有时asp.net标识的文档会很混乱

我有完全相同的症状。关键问题是,您是否使用SecurityStampValidator验证并在需要时重新创建cookie

是的,并且我的设置为从我的Startup.auth开始非常频繁地进行验证:

Provider = new CookieAuthenticationProvider
{
    // Enables the application to validate the security stamp when the user logs in.
    // This is a security feature which is used when you change a password or add an external login to your account.  
    OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, User, int>(
        validateInterval: TimeSpan.FromMinutes(1), 
        regenerateIdentityCallback: (manager, user) =>
        {
            return user.GenerateUserIdentityAsync(manager);
        },
        getUserIdCallback: id => (int.Parse(id.GetUserId()))
        ),
},
因此,假设您有类似的代码-如何重新创建。简单-登录,点击应用程序上的一个页面,然后等待定义的validateInterval失效-所以对我来说,等待1分钟。1分钟后,注销。繁荣我没有注销

现在,这里的问题是GenerateUserIdentityAsync方法在注销发生后立即重新创建身份验证cookie。我已经通过日志记录验证了这一点_authenticationManager.SignOutDefaultAuthenticationTypes.ApplicationOkie;在我的注销操作中,cookie被重新生成。Doh

如何修复-显而易见的是增加validateInterval,但这会影响安全性-如果有人登录到两台计算机,并更改其密码,我希望两个帐户都能很快注销-这就是它的作用


所以,这可能就是原因。很抱歉,我无法提供一个很好的解决方案:

请注意,如果您的意思是将ExternalCookie添加到注销中,那么上面的示例中就包含了该代码。话虽如此,但当我在注销时遇到了可能适用的问题时,我将其更改为。基本上,在我的测试机上,我无法使用SignOut注销,因此我将其更改为SignOutDefaultAuthenticationTypes.ExternalCookie,但它没有帮助,我最终不得不清除co
okies正在使用浏览器。现在它可以工作了,但有时也会出现问题。解决方案是将DefaultAuthenticationTypes.ApplicationOkie作为参数传递给SignOut方法,而不是DefaultAuthenticationTypes.ExternalCookie。请使用此选项重试。注意,如果您的意思是将ExternalCookie添加到注销,则上面的示例中包含该代码。话虽如此,但当我在注销时遇到了可能适用的问题时,我将其更改为。基本上,在我的测试机器上,我无法使用SignOut注销,因此我将其更改为SignOutDefaultAuthenticationTypes.ExternalCookie,但没有任何帮助,我最终不得不使用浏览器清除Cookie。现在它可以工作了,但有时也会出现问题。解决方案是将DefaultAuthenticationTypes.ApplicationOkie作为参数传递给SignOut方法,而不是DefaultAuthenticationTypes.ExternalCookie。请使用此选项重试。在时间到期后,GenerateUserIdentityAsync将再次运行,这是正确的。但是,这在提供任何页面之前运行,因此注销代码在此之后运行。为我更改AuthenticationManager.SignOut;至AuthenticationManager.SignOutDefaultAuthenticationTypes.ApplicationOkie;似乎已经完成了一个技巧,你是对的,在时间到期后,GenerateUserIdentityAsync将再次运行。但是,这在提供任何页面之前运行,因此注销代码在此之后运行。为我更改AuthenticationManager.SignOut;至AuthenticationManager.SignOutDefaultAuthenticationTypes.ApplicationOkie;似乎是他干的