3

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

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

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

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

4

1 回答 1

0

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

假设您被保留在$_SESSION-usernameuserip登录过程之后,所以不是直接保留它$_SESSION,而是将记录添加到$_SESSION[] array.

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

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

好的,所以在几次登录之后,我们得到了一个数组数组usernameuserip

第二件事是重写 url,它会忽略第一部分:

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

从现在开始,我们指的是记录的用户会话,如下所示:

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

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

于 2013-09-11T13:47:01.083 回答