jga*_*iad 2 .net vb.net asp.net asp.net-mvc asp.net-identity
如何在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)
Run Code Online (Sandbox Code Playgroud)
这是不可能的.网络是无状态的:每个请求都是一个独特的雪花,不受之前或之后提出的任何其他请求的影响.但是,由于逻辑上某些状态需要存在于身份验证之类的事情中,所以会话被创建为基本上伪造了一种状态感.
要使用,会话具有服务器端和客户端组件.在服务器上,使用一些持久层来存储与唯一标识特定会话的令牌相关联的用户相关数据.在客户端上,使用该令牌设置cookie.当客户端发出另一个请求时,属于正在播放的特定域的所有cookie将与请求一起发送回服务器,其中包括带有会话令牌的cookie(如果存在).一旦服务器在请求中看到此cookie,它就会使用令牌从持久层查找会话并恢复用户在上一个请求期间的状态.
关键是这个过程是愚蠢的.客户端随着每个请求盲目地将服务器设置的任何cookie发送回服务器.并且,如果服务器获得带有会话令牌的cookie,则会识别,它会盲目地恢复状态.没有考虑正在播放多少个标签,甚至没有考虑cookie的内容(客户端不知道并且不关心cookie是用于管理会话,身份验证等).
无论多长时间,您都无法强制每个标签或窗口进行会话.在客户端,您可以打开另一个浏览器(没有持有会话令牌的cookie)或使用Chrome的隐身模式(创建沙盒浏览体验而不需要任何先前设置的cookie).但是,这些是用户选择的选择,而不是网站.