我想知道如何允许用户在同一会话中登录多个帐户。例如,用户应该能够打开选项卡,登录到帐户A,并打开另一个选项卡以登录帐户B.我还想确保他在第一个选项卡中执行的任何操作仅影响帐户A,但是完成了任何操作在第二个选项卡上影响帐户B,没有别的。
这是我遇到麻烦的更具体的例子。假设有一个名为deleteList(listId)
的JavaScript函数在全局空间中公开,也就是说,他可以在浏览器控制台中调用此函数。现在,此用户以某种方式识别listId中存在的帐户B中的列表。然后,他打开了以帐户A登录的选项卡,并使用该功能删除帐户B中的列表,尽管他在页面上他以帐户A登录的地方。
我知道这可能不是一个实际或真实的情况,但我想知道,为了或学习,如何防止这种行为。也就是说,如果我允许用户登录多个帐户,即使在同一个会话中,如何区分用户建立的每个连接(打开的选项卡/窗口)?
我可以在PHP中使用每个唯一连接创建一个新会话吗?因为我观察到的是,如果我打开多个标签,它们都被识别为同一个会话。
答案 0 :(得分:0)
据我所知,谷歌通过url中的参数处理它。基本思想是将用户数据表存储在$_SESSION
而不是单个记录中。
假设您在登录程序后保留在$_SESSION
- username
和userip
,所以不要将其直接保存在$_SESSION
中,而是将记录添加到{{ 1}}。
$_SESSION[] array
到
$_SESSION['username'] = ...
$_SESSION['userip'] = ...
好的,所以在几次登录后,我们得到了一组$_SESSION[] = array('username' => ...,'userip' => ...);
和username
的数组。
第二件事是重写url它会忽略第一部分:
userip
- > /(.*)/(.*)
从现在开始,我们将引用如下记录的用户会话:
/$2?user=$1
那就是它。当然你可以使用不同的重写规则,这只是一个想法的例子。