Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在一页中同时保持两个会话?_Php_Session - Fatal编程技术网

Php 如何在一页中同时保持两个会话?

Php 如何在一页中同时保持两个会话?,php,session,Php,Session,我有一个在线服务工具,用户可以注册并使用它 我有这个服务的管理控制面板。有时,当用户告诉我们一些关于数据和可用性的奇怪事情时,我们需要像他们登录一样检查它们 所以我决定在管理面板中有一个页面,名为“以xx用户身份登录”,其中xx是我们服务的用户 我只需为特定的用户帐户设置会话变量,并绕过登录选项即可。。当我完成测试后,我注销并再次以管理员身份登录以执行其他活动 但现在我不需要每次以不同的用户身份登录后注销,然后以管理员身份登录 我可以为一个页面/服务同时设置两个会话吗 (即)在浏览器的一个选项卡

我有一个在线服务工具,用户可以注册并使用它

我有这个服务的管理控制面板。有时,当用户告诉我们一些关于数据和可用性的奇怪事情时,我们需要像他们登录一样检查它们

所以我决定在管理面板中有一个页面,名为“以xx用户身份登录”,其中xx是我们服务的用户

我只需为特定的用户帐户设置会话变量,并绕过登录选项即可。。当我完成测试后,我注销并再次以管理员身份登录以执行其他活动

但现在我不需要每次以不同的用户身份登录后注销,然后以管理员身份登录

我可以为一个页面/服务同时设置两个会话吗

(即)在浏览器的一个选项卡中,我充当管理员,在另一个选项卡中,我将充当用户

有什么想法吗


我记得我见过phpbb使用它们…

会话是一种全球可用的阵列,您可以像这样分离前端和后端会话:

<?php

    $_SESSION['frontend']['logged_id'] = true;
    $_SESSION['backend']['logged_id'] = false;

?>

基本上,你所寻求的这条推理路线是一个混乱的过程

您需要的是一个健壮的解决方案,为此,我建议采用如下方案:维护会话变量:

  • 真实用户名
  • 实时登录
  • 虚拟用户名称
  • 虚拟登录时间

因此,当管理员想要以某人身份登录时,您可以设置最后两个。您的安全人员通常应检查最后两个。对管理员页面的访问应该基于前两个页面。

我不知道这是否是解决您问题的有效解决方案,但是如果您使用firefox,您可以使用两个不同的配置文件启动浏览器两次。您不会将应用程序放在同一个选项卡中,但至少您拥有具有不同会话的同一浏览器。如果您复制旧的配置文件,您也应该能够拥有相同的历史记录和插件


如果您决定使用“-p-无远程”作为firefox可执行文件的附加参数。

我认为可能有两种解决方案:

  • 首先,如果您将Admin和服务作为两个不同的应用程序,它们将管理每个应用程序的会话。如果你的服务不是这样设计的,或者如果改变会带来巨大的成本,那就不是一个好的选择

  • 其次,您可以在会话对象中设置两个对象,一个用于管理,另一个用于服务


您不能有两个单独的会话,但您可以在用户会话中添加一些额外变量,告知您已登录为管理员。

一些想法:

  • 使用两种不同的浏览器
  • 从两个不同的(虚拟)计算机连接
  • 使用CookiePie之类的工具来允许每个选项卡使用不同的Cookie
  • 通过代理连接一个实例
  • 如果可以,通过两个不同的域托管相同的web应用程序,并在每个会话中使用一个
  • 使用hosts文件提供额外的域名
  • 如果会话是通过URL而不是cookie传播的,那么这将很自然地工作,但它会带来各种糟糕的可用性和安全性后果

正如前面一篇文章所建议的,您可以使用Firefox的Cookpie插件在每个浏览器选项卡中有两个单独的标识-但该扩展不适用于Firefox 4(他们说他们正在使用它…),但是有一个新的类似扩展名为Multifox,它适用于Firefox 4。您可以尝试一下。

一旦用户登录,就会根据其用户帐户详细信息设置许多会话变量。这些会话数据在整个服务中使用。。我的示例会话变量如下..$\u会话['CID']=“$CID”;$\会话['CURRENCY']=“$cur”;$\会话['HRS']=“已通过”$_会话['EMA']=“$email”;这些变量甚至是为管理员设置的。作为管理员,我也有一个像普通用户一样的帐户。。除了我有一个管理面板,我可以登录和做操作。因此,为普通用户设置的会话变量对于管理员也是必需的。
<?php
    foreach ($_SESSION as $key => $value)
    {
        if (substr($key, 0, 3) == 'my_')
        {
            continue;
        }
        unset($_SESSION[$key]);
    }
?>