【问题标题】:Is it possible to implement authentication on the instance of the browser scope?是否可以在浏览器范围的实例上实现身份验证?
【发布时间】:2011-07-18 16:34:06
【问题描述】:

是否可以实现仅在同一浏览器实例中可用的身份验证。我的意思是当用户从同一浏览器的另一个实例进入时,他将能够从不同的帐户登录。两个账号会同时登录吗?

【问题讨论】:

  • 您是指浏览器窗口的实例还是其他浏览器?
  • 同一浏览器的不同实例
  • @OneHalfTrackMindMan:谢谢,我编辑了
  • 你之前使用过Form授权吗?
  • @OneHalfTrackMindMan:你在开玩笑吗!!!

标签: .net asp.net authentication


【解决方案1】:

表单身份验证允许这样做。考虑到您必须打开另一个浏览器窗口而不是选项卡,因为通常在浏览器窗口的选项卡之间共享身份验证 cookie。

如果您在登录页面上使用登录控件,请将 DisplayRememberMe 属性值设置为 false。并使用以下代码从登录页面重定向:FormsAuthentication.RedirectFromLoginPage(LoginControl.UserName, false); 在这种情况下,身份验证 cookie 将存储在浏览器的进程中,并且不会在浏览器的多个实例之间共享。

如果您仍然有兴趣获得答案,我将尝试解释表单身份验证的工作原理。 每次您打开受保护的页面系统时都会检查身份验证 cookie。如果它不存在,系统会返回一个未授权的响应并将用户重定向到登录页面。当用户输入登录名和密码时,表单授权尝试使用提供的凭据对用户进行身份验证。如果凭据有效,则系统生成身份验证 cookie 并将其发送到客户端的浏览器。然后这个cookie用于未来的请求。 有两种方法可以将此 cookie 存储在客户端: 第一个 - 当 cookie 保存在客户端的硬盘上时。在这种情况下,这个特定的 cookie 会在用户每次打开本网站的页面时使用。而且这个 cookie 对于每个浏览器实例都是相同的,所以你不能用不同的凭据打开不同的浏览器实例。 但第二个选项是身份验证 cookie 不保存在客户端的硬盘驱动器上,而是存储在浏览器的进程中。在这种情况下,您可以为不同的用户打开很多浏览器窗口。 正如我上面提到的,ASP.NET 中的这两种情况可以通过为 FormsAuthentication.SetAuthCookie 或 FormsAuthentication.RedirectFromLoginPage 方法提供适当的第二个参数来实现:true 表示将 cookie 保存在客户端的 HDD 上,false 表示将 cookie 存储在浏览器进程中。

顺便说一句,即使使用 Windows 身份验证,您也可以使用不同的凭据打开网站页面。为此,您必须使用“运行方式...”命令启动浏览器并提供不同的 Windows 凭据。

【讨论】:

  • 怎么样?当我登录一个实例并打开另一个实例时,第二个实例将被登录。当我从其中一个实例注销时,另一个实例将被注销。
  • 在 IE 中尝试使用 Gmail,您会发现它在实例之间共享身份验证 cookie。我也尝试过,结果相同(即使我尝试过(文件 - 新会话),身份验证 cookie 也是共享的(IE 8,9))
  • Gmail 将 cookie 存储为持久性。如果您关闭计算机并重新启动它,您仍然处于登录状态。
  • @user748910:只有在您选择保持在线的情况下才适用。否则,它会在浏览器关闭然后重新打开时注销。试试看!
  • 您是想建立自己的网站还是同时登录两个不同的 gmail 帐户?
【解决方案2】:

这样做的唯一方法是在查询字符串中保留会话 ID。这很丑陋,但可以使用表单身份验证(iirc)。除非有非常好的具体原因需要这样做,否则我建议不要这样做

【讨论】:

    猜你喜欢
    • 2012-07-04
    • 1970-01-01
    • 1970-01-01
    • 2016-01-11
    • 1970-01-01
    • 2020-03-10
    • 2016-04-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多