如何在 asp.net mvc 5 和 Identity 中的每个选项卡中使用不同的帐户登录?
是否有不使用 Cookie 的配置?
这是我的配置代码:
' Enable the application to use a cookie to store information for the signed in user
app.UseCookieAuthentication(New CookieAuthenticationOptions() With {.AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, .LoginPath = New PathString("/Account/Login") _
})
' Use a cookie to temporarily store information about a user logging in with a third party login provider
app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie)
是不可能的。网络是无状态的:每个请求都是一片独特的雪花,不受之前或之后发出的任何其他请求的影响。但是,由于逻辑上需要存在某种状态才能实现身份验证等内容,因此创建会话基本上是为了伪造状态感。
为了工作,会话具有服务器端和客户端组件。在服务器上,使用一些持久性层来存储与唯一标识特定会话的令牌绑定的用户相关数据。在客户端上,使用该令牌设置 Cookie。当客户端发出另一个请求时,属于特定域的所有 cookie 都会与请求一起发送回服务器,其中包括带有会话令牌的 cookie(如果存在(。一旦服务器在请求中看到此 Cookie,它就会使用该令牌从持久性层查找会话,并恢复用户在上一个请求期间的状态。
关键是这个过程是愚蠢的。客户端会盲目地将服务器设置的任何 cookie 发送回服务器。而且,如果服务器获得带有它识别的会话令牌的 cookie,它会盲目地恢复状态。没有考虑有多少个选项卡在起作用,甚至不考虑cookie的内容是什么(客户端不知道也不关心cookie是否用于管理会话,身份验证等(。
无论何时简短,您都无法执行任何操作来强制每个选项卡或窗口进行会话。在客户端,您可以打开其他浏览器(其中没有保存会话令牌的 Cookie(或使用类似 Chrome 的隐身模式(创建沙盒浏览体验,而无需任何先前设置的 Cookie(。但是,这些是用户做出的选择,而不是网站。