在一个会话中管理多个帐户,打开多个选项卡

时间:2012-04-20 10:56:30

标签: coldfusion session-variables multi-user browser-tab

情境:

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

问题:

当管理员点击两个或多个链接并使用tab1 = user1和tab2 = user2打开两个选项卡时,最后一次单击的选项卡将覆盖所有其他选项卡的会话变量。当然......这是会议如何运作的,但我想知道是否有办法让管理员在多个标签中管理多个用户界面和一个会话?但我没有看到在浏览器中识别特定标签的可能性,以便我可以说"在tab1中是user1而在tab2中是user2登录...

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


修改

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

1 个答案:

答案 0 :(得分:4)

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

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

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

您还需要更新网站上的所有链接,以便在其中包含用户ID。更简单的方法是作弊和用户jQuery等,以附加userid重写所有内部网址。您将根据上述检查有条件地包含该JavaScript。

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

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

这是一件可行的事情,但可能还有很多你希望的工作。

另一个选项是让管理员使用Google Chrome with multiple profiles并将登录网址复制并粘贴到不同的个人资料窗口中。给他们带来轻微的不便,但对你的工作要少得多。