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

时间:2013-09-11 13:37:45

标签: php web-applications

我想知道如何允许用户在同一会话中登录多个帐户。例如,用户应该能够打开选项卡,登录到帐户A,并打开另一个选项卡以登录帐户B.我还想确保他在第一个选项卡中执行的任何操作仅影响帐户A,但是完成了任何操作在第二个选项卡上影响帐户B,没有别的。

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

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

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

1 个答案:

答案 0 :(得分:0)

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

假设您在登录程序后保留在$_SESSION - usernameuserip,所以不要将其直接保存在$_SESSION中,而是将记录添加到{{ 1}}。

$_SESSION[] array

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

好的,所以在几次登录后,我们得到了一组$_SESSION[] = array('username' => ...,'userip' => ...); username的数组。

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

userip - > /(.*)/(.*)

从现在开始,我们将引用如下记录的用户会话:

/$2?user=$1

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