场景:
我有一个管理应用程序,它管理另一个应用程序的用户帐户。现在,我想在管理应用程序中放置一个特定于用户的链接(例如Click here to login with user1),允许管理员在单独的浏览器窗口或选项卡(target="_blank")中直接与用户登录。
问题:
当管理员单击两个或多个链接并使用tab1=user1和tab2=user2打开两个选项卡时,最后一个单击选项卡将覆盖所有其他选项卡的会话变量。当然..。这就是会话的工作方式,但我想知道是否有一种方法可以让管理员管理多个用户界面,并在多个选项卡中使用一个会话?但是我看不到在浏览器中识别特定选项卡的可能性,这样我就可以说"in tab1 is user1 in tab2 is user2登录.
问题:曾经做过类似的事情并且喜欢分享解决这个问题的基本想法吗?
编辑:
一种可能的解决方案是向URL中添加一个带有userid的参数,并将其传递到每个页面,对吗?
发布于 2012-04-20 11:37:47
正如您的编辑所指出的,这样做的方法是使用一个url变量来指定用户应该是谁。
这种方法存在许多安全问题。
我假设您的初始链接正在进行某种类型的安全检查,以确保用户的初始“登录”是一个授权请求。对于这种方法,您需要做类似的事情。如果您的初始请求类似于http://example.com/page.cfm?userid={id}&authtoken={encryptedtoken},那么我将把这个userid作为管理员可以模拟的有效用户is放到会话范围中。他们点击的链接越多,他们可以模拟的用户就越多。在随后的请求中,您将根据会话中允许的列表检查请求的userid,并允许或拒绝模拟。
您还需要更新站点上的所有链接,以便它们中包含用户in。更简单的方法是欺骗和用户jQuery等等,用附加的userid重写所有内部urls。您将有条件地包含基于上述检查的javascript。
最后,如果userid不是一个完全封闭的站点,那么您很可能希望阻止这些包含该urls的urls出现在搜索引擎中。您需要使用规范的urls来删除userid,或者设置x-机器人头来告诉搜索引擎不要在指定userid的地方索引urls;或者两者都需要。
这是在同一个浏览器中为多个用户获取不同“会话”的最原始方法。但是,如果您将会话范围用于任何有意义的内容,则会遇到问题,因为每个选项卡将试图覆盖另一个选项卡。您将需要覆盖每个请求上的正常站点会话变量,或者需要在会话范围中为所使用的每个用户is创建不同的结构。这在多大程度上取决于应用程序。
这是一件可以做的事,但可能比你期望的要多得多。
另一个选择是让管理员使用带有多个配置文件的Google Chrome,并将登录url复制并粘贴到不同的配置文件窗口中。给他们带来了一点不便,但你的工作量却少了很多。
https://stackoverflow.com/questions/10244874
复制相似问题