【问题标题】:Session per tab with asp.net mvc and Identity使用 asp.net mvc 和 Identity 的每个选项卡的会话
【发布时间】:2014-12-01 18:04:30
【问题描述】:

如何在 asp.net mvc 5 和 Identity 中为每个选项卡使用不同的帐户登录?

有没有不使用cookies的配置?

这是我的配置代码:

' 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)

【问题讨论】:

  • 我想你忘了记住网络本质上是无状态的,并且不知道标签。为什么还要为每个选项卡单独设置一个会话?
  • 好吧。我需要类似于 gmail“使用另一个帐户登录”的功能。有可能实现类似的东西吗?
  • 当然可以。显然,Gmail 已经做到了。但这不是创建另一个会话。
  • Google 的多重登录实际上是 links 帐户。它不会创建不同的会话或任何东西。它只是在现有身份验证中添加另一个帐户,并在内部设置一些关于您目前实际使用的链接帐户的标志。

标签: asp.net .net asp.net-mvc vb.net asp.net-identity


【解决方案1】:

这是不可能的。网络是无状态的:每个请求都是一个独特的雪花,不受之前或之后发出的任何其他请求的影响。但是,由于逻辑上需要存在某种状态来进行身份验证等操作,因此创建会话基本上是为了伪造一种状态感。

为了工作,会话具有服务器端和客户端组件。在服务器上,使用一些持久层来存储与唯一标识特定会话的令牌相关联的用户相关数据。在客户端上,使用该令牌设置 cookie。当客户端发出另一个请求时,属于正在运行的特定域的所有 cookie 都会与请求一起发送回服务器,如果存在会话令牌,服务器会包括带有会话令牌的 cookie。一旦服务器在请求中看到这个 cookie,它就会使用令牌从持久层查找会话并恢复用户在上一个请求期间的状态。

关键是这个过程是愚蠢的。客户端在每次请求时都会盲目地将服务器设置的任何 cookie 发送回服务器。而且,如果服务器获得一个带有它识别的会话令牌的 cookie,它会盲目地恢复状态。没有考虑有多少标签正在播放,甚至 cookie 的内容是什么(客户端不知道也不关心 cookie 是否用于管理会话、身份验证等)。

总而言之,您无法强制每个选项卡或窗口进行会话。在客户端,您可以打开一个不同的浏览器(不会有保存会话令牌的 cookie)或使用类似 Chrome 的隐身模式(创建沙盒浏览体验而无需任何先前设置的 cookie)。但是,这些是用户做出的选择,而不是网站。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-19
    • 1970-01-01
    相关资源
    最近更新 更多