这是一个咆哮,也是一个问题。
有些网站,比如Facebook,您一次只想登录一个帐户。
但是,从博客网站到电子邮件的所有内容都会强制您退出,然后才能登录其他帐户。
我理解安全隐患,以及它如何使基于cookie的会话变得更复杂,但为什么我们不会看到更多这样的内容呢?
为什么单个客户端的多个用户一次成为一个坏主意?
答案 0 :(得分:8)
我认为这是应该由浏览器实现的,允许多个会话,每个会话使用自己的cookie /身份验证/等。
这可能是最好的解决方案,因为它似乎适用于所有网站,并且不需要对它们进行更新,虽然我不太了解它,但似乎并不十分困难实施任何一种。
答案 1 :(得分:3)
简单问题大多数会话都是通过Cookie实现的,如果没有Cookie,几乎没有办法实现。
Cookie的工作方式是,它们是绑定到域/路径的,并且所有与该域绑定的cookie都会被发送。
因此,如果您允许通过2个不同的cookie进行两次登录,则问题是每个连续的页面都会发送 BOTH Cookie,而服务器看到它们都不知道您扮演的是哪个“用户” 。
唯一的方法围绕这一点传递所有链接的“线程”标识,(即,动态重写每个网站链接到foo.bar?thread=2
或thread=1
指出用于事物的会话),这是一个完整的噩梦,更不用说安全隐患了。
唯一可行的方法是通过浏览器沙箱,用户告诉浏览器给定的标签和所有分支使用一个cookie集,另一个标签和所有分支使用另一个。
从本质上讲,它不是一个可以通过网站以实际方式解决的问题。
实际上没有好的方法来存储这些信息,而无需将控件委托给浏览器实现它的工作方式,并且用户手动指示他们何时要分叉到新的会话。
答案 2 :(得分:3)
“为什么单个客户端的多个用户一次成为一个坏主意?”
这根本不是一个坏主意,但HTTP的使用迫使我们走这条路。
大多数客户端/服务器协议都是有状态的 - 客户端在握手期间只需要进行一次身份验证,然后会话由套接字连接表示。如果您丢失了连接,则会丢失会话并且必须重新进行身份验证。因此,在一个进程中编写允许多个会话(作为相同或不同用户)的应用程序是微不足道的。
HTTP是无状态的。客户端需要以某种方式对每个请求重新进行身份验证。身份验证信息通常存储在cookie中,这样一旦初始身份验证完成,用户就不必参与其中。然而,Cookie是全局的 - 不仅仅是全局的,而且通常是跨应用程序的实例/调用。因此,您只能参加一次会议。
您可能会认为网络应用程序设计人员会将这一巨大的限制视为一种迹象,表明HTTP并不是客户端/服务器应用程序开发的正确协议。
答案 3 :(得分:1)
多次登录的一个含义是如何管理权限。假设我有两个帐户,一个帐户有权删除用户帐户,而我的其他帐户没有此权限。
如果我可以同时登录我的两个帐户(优先级),我是否拥有两个帐户的特权联盟,或者只有两个帐户所拥有的特权交集?
如果我拥有特权联盟,我是否有能力将这些多个帐户中的特权组合在一起,给予我太大的权力?这对萨班斯 - 奥克斯利法案的遵守意味着什么?
对于作为特权组的“角色”,在SQL中可以看到同等的问题。在标准SQL中,允许给定帐户采用多个角色,但一次只能使用一个。这可以防止你行使太多特权。
答案 4 :(得分:0)
Cookie状态锚定到主机标头...
使用其他主机名或直接使用其IP地址连接到该站点。根据站点的不同,您可以为站点设置一堆本地主机别名,允许您多次登录,因为每个别名都有自己的cookie状态。
如果网站重定向到自身以强制使用特定主机标头,则别名将无法使用,您将需要使用多个浏览器。
答案 5 :(得分:0)
自从你第一次写这个问题以来,IE 8已经正式发布,它有一个内置功能,可以满足您的需求。从“文件”菜单中,单击“新建会话”。这将打开一个不与原始窗口共享会话cookie的新窗口,允许您同时登录不同登录的同一站点。
http://blogs.msdn.com/ie/archive/2009/05/06/session-cookies-sessionstorage-and-ie8.aspx
答案 6 :(得分:0)
您可以通过创建新的配置文件在Firefox中执行多个会话 - 运行:firefox.exe -P,您可以在其中设置具有不同Cookie的多个配置文件 - 您可以通过使用同时运行多个firefox会话firefox.exe -P“profileName”-no-remote。无遥控器每个会话只允许1个窗口,但同时也允许多个会话。