是否可以实现仅在浏览器的同一实例中可用的身份验证。我的意思是当用户从同一浏览器的另一个实例进入时,他将能够从另一个帐户登录。这两个帐户将同时登录?
答案 0 :(得分:1)
表单身份验证允许这样做。请注意,您必须打开另一个浏览器窗口而不是选项卡,因为通常在浏览器窗口中的选项卡之间共享身份验证cookie。
如果在登录页面上使用Login控件,则将DisplayRememberMe属性值设置为false。并使用以下代码从登录页面重定向:FormsAuthentication.RedirectFromLoginPage(LoginControl.UserName, false);
在这种情况下,身份验证cookie将存储在浏览器的进程中,并且不会在浏览器的多个实例之间共享。
如果您仍然有兴趣得到答案,我将尝试解释表单身份验证的工作原理。 每次打开受保护的页面系统检查身份验证cookie。如果它不存在,系统将返回未授权的响应并将用户重定向到登录页面。当用户输入登录名和密码时,表单授权尝试使用提供的凭据对用户进行身份验证。如果凭据有效,则系统生成身份验证cookie并将其发送到客户端的浏览器。然后这个cookie用于将来的请求。 这种cookie可以通过两种方式存储在客户端: 第一个 - 当cookie存在于客户端的硬盘上时。在这种情况下,每次用户打开此站点的页面时,此特定cookie都会使用。对于每个浏览器实例,此cookie都是相同的,因此您无法使用不同的凭据打开不同的浏览器实例。 但第二种选择是当身份验证cookie不存在于客户端的硬盘驱动器上但存储在浏览器的进程中时。在这种情况下,您可以为不同的用户打开很多浏览器窗口。 正如我在上面提到的,ASP.NET中的这两个场景可以通过为FormsAuthentication.SetAuthCookie或FormsAuthentication.RedirectFromLoginPage方法提供适当的第二个参数来实现:对于客户端硬盘上的持久cookie而言为true,对于浏览器进程中的商店cookie则为false。
顺便说一句,即使使用Windows身份验证,您也可以使用不同的凭据打开网站页面。要实现此目的,您必须使用“运行方式...”命令启动浏览器并提供不同的Windows凭据。
答案 1 :(得分:0)
这样做的唯一方法是在查询字符串中保留会话ID。这非常难看,但可能(iirc)使用表单身份验证。除非有一个非常好的具体原因需要这个,我建议不要这个