如何一次为两个页面保留两个会话?

时间:2010-08-03 11:26:30

标签: php session

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

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

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

我通过简单地为该特定用户帐户设置会话变量并绕过登录选项来完成它。当我完成测试时,我注销并再次以管理员身份登录以执行其他活动..

但现在我不需要退出,然后在每次以不同用户身份登录后以管理员身份登录..

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

(即)在浏览器的一个标签中,我充当管理员,而在其他标签中,我将充当用户?

任何想法..

我记得已经看过phpbb使用它们了......

7 个答案:

答案 0 :(得分:1)

Session是一种全局可用的数组,您可以像这样分隔前端和后端会话:

<?php

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

?>

您的脚本可以帮助我为您提供更详细的示例代码。

<强>更新

  1. 为您的设置会话添加前缀。像这样:$_SESSION['my_CID'] = $cid;
  2. 您必须深入了解后端/管理代码并找到注销操作的位置。
  3. 该操作可能会像这样杀死整个会话:session_destroy()unset($_SESSION);
  4. 使用下面的代码不会杀死带前缀的会话。
  5. 以下是代码:

    <?php
        foreach ($_SESSION as $key => $value)
        {
            if (substr($key, 0, 3) == 'my_')
            {
                continue;
            }
            unset($_SESSION[$key]);
        }
    ?>
    

答案 1 :(得分:0)

基于这种推理,你所寻求的是一种kludge。

你想要的是一个强大的解决方案,为此我建议这样的方案:维护会话变量:

  • real_user_name
  • real_login_time
  • virtual_user_name
  • virtual_login_time

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

答案 2 :(得分:0)

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

如果您决定这样做,则必须使用“-P -no-remote”作为firefox可执行文件的附加参数。

答案 3 :(得分:0)

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

  • 首先,如果您将管理员和服务作为两个不同的应用程序,他们将管理每个会话。如果您的服务不是以这种方式设计的,或者如果变更费用很高,则不是一个很好的选择。

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

一些想法:

  • 使用两种不同的浏览器
  • 从两台不同的(虚拟)机器连接
  • 使用像CookiePie这样的内容来允许每个标签使用不同的Cookie
  • 通过代理连接一个实例
  • 如果可以,可以通过两个不同的域托管相同的Web应用程序,并为每个会话使用一个
  • 使用hosts文件提供额外的域名
  • 如果会话是通过URL而不是cookie传播的,那么这将自然地起作用,但它具有各种令人讨厌的可用性和安全性后果

答案 6 :(得分:0)

正如之前的帖子所建议的,您可以使用适用于Firefox的Cookpie插件在每个浏览器选项卡中拥有两个独立的身份 - 但该扩展程序不适用于Firefox 4 - (他们说他们正在处理它... 。)然而,有一个更新的类似扩展名为Multifox,它可以在Firefox 4中运行。你可以试试。