为了账号安全,请及时绑定邮箱和手机立即绑定

ASP.NET_SessionId+owin Cookies不发送到浏览器

ASP.NET_SessionId+owin Cookies不发送到浏览器

哔哔one 2019-07-26 15:14:24
ASP.NET_SessionId+owin Cookies不发送到浏览器我在使用owin cookie身份验证时遇到了一个奇怪的问题。当我启动IIS服务器时,身份验证在IE/Firefox和Chrome上非常好。我开始在不同的平台上进行身份验证和登录测试,并出现了一个奇怪的错误。偶尔,owin框架/IIS不向浏览器发送任何cookie。我将输入一个用户名和密码,这是正确的代码运行,但没有cookie被传递到浏览器。如果我重新启动服务器,它就会开始工作,然后在某个时候尝试登录,然后cookie再次停止交付。跨过代码,什么也不做,也不会抛出任何错误。 app.UseCookieAuthentication(new CookieAuthenticationOptions         {             AuthenticationMode = AuthenticationMode.Active,             CookieHttpOnly = true,             AuthenticationType = "ABC",             LoginPath = new PathString("/Account/Login"),             CookiePath = "/",             CookieName = "ABC",             Provider = new CookieAuthenticationProvider                {                   OnApplyRedirect = ctx =>                   {                      if (!IsAjaxRequest(ctx.Request))                      {                         ctx.Response.Redirect(ctx.RedirectUri);                      }                  }                }         });更新1:问题的一个原因似乎是当我在会话中添加项目时,问题就开始了。添加一些简单的东西,比如Session.Content["ABC"]= 123似乎造成了这个问题。我能看到的是:1)(Chrome)当我登录时,我得到ASP.NET_SessionId+我的身份验证cookie。2)我浏览了一页设置会话的页面.内容.3)打开一个新浏览器(Firefox)并尝试登录,它既不会接收ASP.NET_SessionId,也不会获得身份验证Cookie 4)当第一个浏览器具有ASP.NET_SessionId时,它将继续工作。从我删除这个cookie的那一刻起,它就和我正在处理的IP地址(10.x.x)和本地主机上的所有其他浏览器一样的问题。更新2:力的创造ASPNET_SessionId在使用owin进行身份验证之前,首先在登录_LOAD页面上。1)在我验证自己的身份之前,我先做一个随机的Session.Content值,以启动ASP.NET_SessionId 2),然后进行身份验证并进行进一步的会话(3)其他浏览器现在似乎可以工作了。这太奇怪了。我只能得出结论,这与ASP和owin认为他们在不同的领域或类似的事情有关。更新3-两者之间的奇怪行为。另外还发现了一些奇怪的行为-OWIN和ASP会话的超时是不同的。我看到的是,通过某种机制,我自己的会话比我的ASP会话的生存期更长。因此,当登录时:1.)我有一个以烹饪为基础的第二节课。)我设置了几个会话变量我的会话变量(2)在owin cookie会话变量之前“死亡”强制重新登录,这会导致整个应用程序中的意外行为。(Person登录,但没有真正登录)更新3B在深入研究之后,我在页面上看到了一些评论,其中说“Forms”身份验证超时和会话超时需要匹配。我认为正常情况下,两者是同步的,但无论出于什么原因,两者并不同步。解决办法概述1)始终先创建一个会话,然后再进行身份验证。基本上是在启动应用程序时创建会话。Session["Workaround"] = 0;2)[实验性的]如果持久化cookie,请确保自己的超时/长度比web.config中的sessionTimeout长(在测试中)
查看完整描述

3 回答

?
当年话下

TA贡献1890条经验 获得超9个赞


我查看了owin和System.Web源代码。

问题是System.Web有自己的Cookie信息的主源,而不是set-Cookie头。奥文只知道布景饼干头球的事。解决方法是确保owin设置的所有cookie也在HttpContext.Current.Response.Cookies收藏。

我做了一个小中间件(来源努基特)就是这样做的,目的是将其放在cookie中间件注册之后。

app.UseKentorOwinCookieSaver();app.UseCookieAuthentication(new CookieAuthenticationOptions());




查看完整回答
反对 回复 2019-07-27
  • 3 回答
  • 0 关注
  • 389 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信