我应该如何处理在同一会话中登录多个帐户的用户


How should I handle users loging into multiple accounts in the same session?

我想知道如何允许用户在同一会话中登录多个帐户。例如,用户应该能够打开一个选项卡,登录到账户 A,然后打开另一个选项卡以登录账户 B。我还想确保他在第一个选项卡中所做的任何事情仅影响帐户 A,但在第二个选项卡上所做的任何操作都会影响帐户 B,而不会影响其他任何内容。

这是我遇到麻烦的更具体的例子。假设有一个名为 deleteList(listId) 的 JavaScript 函数暴露在全局空间中,也就是说,他可以在浏览器控制台中调用这个函数。现在,此用户以某种方式标识了账户 B 中存在的列表的 listId。然后,他打开以账户 A 身份登录的选项卡,并使用该功能删除账户 B 中的列表,尽管他在以账户 A 身份登录的页面上。

我知道这可能不是一个实际或真实的情况,但我想知道,为了学习或学习,如何防止这种行为。也就是说,如果我允许用户登录到多个帐户,那么即使在同一个会话中,我如何区分用户建立的每个连接(打开的选项卡/窗口)?

我可以在 PHP 中为每个唯一连接创建一个新会话吗?因为我观察到的是,如果我打开多个选项卡,它们都会被标识为同一会话。

据我所知,谷歌通过网址中的参数处理它。基本思想是将用户数据表存储在$_SESSION而不是单个记录中。

假设您在登录过程后被保留在$_SESSION - usernameuserip中,因此您不是直接将其保留在$_SESSION中,而是将记录添加到$_SESSION[] array

$_SESSION['username'] = ...
$_SESSION['userip'] = ...

$_SESSION[] = array('username' => ...,'userip' => ...);

好的,所以在几次登录后,我们得到了一个username数组和userip数组。

第二件事是重写它将忽略第一部分的 url:

/(.*)/(.*) -> /$2?user=$1

从现在开始,我们像这样引用记录的用户会话:

$_SESSION[$_GET[user]][...]

就是这样。当然,您可以使用不同的重写规则,这只是一个想法示例。