0

设想:

我有一个管理应用程序,它管理另一个应用程序的用户帐户。现在我想Click here to login with user1在管理应用程序中放置一个用户特定链接(例如 ),允许管理员在单独的浏览器窗口或选项卡(target="_blank")中直接与用户登录。

问题:

当管理员单击两个或更多链接并打开两个 tab1=user1 和 tab2=user2 的选项卡时,最后单击的选项卡会覆盖所有其他选项卡的会话变量。当然......这就是会话的工作方式,但我想知道是否有一种方法可以让管理员在多个选项卡中通过一个会话管理多个用户界面?但是我看不到在浏览器中识别特定选项卡的可能性,因此我可以说“在 tab1 中是 user1 而在 tab2 中是 user2 登录...

问题: 有没有人做过类似的事情并喜欢分享解决这个问题的基本想法?


编辑:

一种可能的解决方案是使用用户 ID 将参数添加到 URL 并将其传递到每个页面,对吗?

4

1 回答 1

4

正如您的编辑指出的那样,执行此操作的方法是使用指定用户应该是谁的 url 变量。

这种方法存在许多安全问题。

我假设您的初始链接正在进行某种安全检查,以确保用户的初始“登录”是授权请求。您需要为此方法执行类似的操作。如果您的初始请求类似于http://example.com/page.cfm?userid={id}&authtoken={encryptedtoken}我会将该用户标识作为管理员可以模拟的有效用户标识放入会话范围。他们点击的链接越多,他们可以模拟的用户就越多。在后续请求中,您userid根据会话中的允许列表检查请求,并允许或拒绝模拟。

您还需要更新站点上的所有链接,以便它们在其中包含用户 ID。更简单的方法是欺骗和使用 jQuery 或类似的东西来重写所有带有userid附加的内部 url。您将根据上述检查有条件地包含该 javascript。

userid最后,如果它不是一个完全锁定的站点,您可能希望阻止这些包含 的 url出现在搜索引擎中。您要么需要使用规范 url 来删除userid,要么设置 x-robots 标头以告诉搜索引擎不要索引userid已指定 的 url;或两者。

这是在同一浏览器中为多个用户获取不同“会话”的最原始方法。但是,如果您将会话范围用于任何有意义的事情,您就会遇到问题,因为每个选项卡都会尝试覆盖另一个选项卡。您需要在每个请求上覆盖正常的站点会话变量,或者您需要在会话范围内为使用的每个用户标识创建不同的结构。这有多少问题取决于您的应用程序。

这是一件可行的事情,但可能比你希望的要多得多。

另一种选择是让管理员使用具有多个配置文件的 Google Chrome,并将登录 URL 复制并粘贴到不同的配置文件窗口中。对他们来说有点不便,但对你来说却少了很多工作。

于 2012-04-20T11:37:47.580 回答