>场景:
我有一个管理应用程序,用于管理另一个应用程序的用户帐户。现在我想放置一个特定于用户的链接(例如 Click here to login with user1
),允许管理员在单独的浏览器窗口或选项卡(target="_blank"
)中直接与用户一起登录。
问题:
当管理员单击两个或多个链接并打开两个选项卡 tab1=user1 和选项卡 2=user2 时,上次单击的选项卡将覆盖所有其他选项卡的会话变量。确定。。。这就是会话的工作方式,但我想知道是否有办法让管理员在多个选项卡中使用一个会话管理多个用户界面?但是我认为无法在浏览器中识别特定选项卡,因此我可以说"在选项卡 1 中是用户 1,在选项卡 2 中是用户 2 登录......
问题:有没有人做过类似的事情并喜欢分享解决这个问题的基本想法?
编辑:
一种可能的解决方案是使用userid向URL添加一个参数并将其传递给每个页面,对吗?
正如您的编辑所指出的,执行此操作的方法是使用 url 变量来指定用户应该是谁。
这种方法存在许多安全问题。
我假设您的初始链接正在执行某种安全检查,以确保用户的初始"登录"是授权请求。 您需要为此方法执行类似操作。 如果您的初始请求类似于http://example.com/page.cfm?userid={id}&authtoken={encryptedtoken}
我会将该用户 ID 作为管理员可以模拟的有效用户 ID 放入会话范围。 他们点击的链接越多,他们可以模拟的用户就越多。 在后续请求中,根据会话中的允许列表检查请求的userid
,并允许或拒绝模拟。
您还需要更新网站上的所有链接,以便它们包含用户 ID。 更简单的方法是作弊和用户jQuery等重写所有内部网址,并附加userid
。 您将根据上述检查有条件地包含该 javascript。
userid
的网址不是完全锁定的网站,您可能希望阻止这些网址出现在搜索引擎中。您要么需要使用规范网址来删除userid
,要么设置 x-robots 标头以告诉搜索引擎不要索引已指定userid
的网址;或两者兼而有之。
这是在同一浏览器中为多个用户获取不同"会话"的最原始方法。 但是,如果您将会话范围用于任何有意义的事情,则会遇到问题,因为每个选项卡都会尝试覆盖另一个选项卡。 您需要覆盖每个请求上的正常站点会话变量,或者需要在会话范围内为使用的每个用户 ID 创建不同的结构。 这有多大问题取决于您的应用程序。
这是一件可以做的事,但可能比你希望的要多得多。
另一种选择是让管理员将谷歌浏览器与多个配置文件一起使用,并将登录网址复制并粘贴到不同的配置文件窗口中。 对他们来说有点不便,但对你的工作要少得多。