【问题标题】:Distinguish between two sessions in PHP区分 PHP 中的两个会话
【发布时间】:2012-05-24 10:11:21
【问题描述】:

我尝试通过以下方式在本地主机上为其中一个网站进行编码。说 localhost/abc:

<?php
session_start();
$_SESSION['name']=$row['name']
?>

输出很好。但是当相同的代码用于同一本地主机上的另一个网页时,请说 localhost/xyz。然后名字之间就出现了歧义。好像我需要区分 xyz 和 abc 的会话。

所以我尝试了这个:

<?php
session_id(226);
session_name(veer);
session_start();
.
.
.//connection with database and all
.
$_SESSION['name']=$row['name'];
echo($_SESSION['name']);
?>

当另一台机器通过同一服务器登录时,该机器可以访问我创建的会话以访问同一网页。

有什么解决办法。或者如何区分两个会话?

【问题讨论】:

标签: php session


【解决方案1】:

简单来说...当您使用同一个浏览器实例访问同一 Web 服务器上的两个不同站点时,您访问的是服务器的同一内存区域。因此

http://localhost/xyzhttp://localhost/abc 指的是同一个站点 localhost,因此您不会通过 session_start() 启动另一个会话,而是恢复它。您也可以像Jon 所说的那样创建虚拟主机,但为了进行测试,我猜您是这样,只需使用不同的浏览器即可。

另外,你不能在不同的机器上正常共享会话,所以我认为这是你的逻辑错误。或者尝试

session_start();
echo (session_id());

在页面顶部,查看您是否正在开始或恢复我认为您没有的同一会话。我认为您的页面在不同的会话中存储了相同的数据,您被误认为是同一会话。

【讨论】:

    【解决方案2】:

    在第二个文件(xyz)中使用session_regenerate_id();方法。

    【讨论】:

      【解决方案3】:

      这个?

      <?php
      session_start();
      if (!isset($_SESSION['xyz'])) { $_SESSION['xyz'] = array(); }
      $_SESSION['xyz']['name'] = $row['name'];
      ?>
      

      有时我只是在我的会话密钥前面加上前缀而不是执行上述操作 例如:$_SESSION['xyz_name']; 在我意识到我的 CPanel 已经使用了它自己的一些会话之后,我这样做了 这导致了我的冲突。

      【讨论】:

        【解决方案4】:

        从同一用户代理到同一网络服务器的请求将共享同一会话,除非显式配置取决于您的确切服务器设置。

        通常会避免此问题,因为“其他网页”实际上会完全位于另一个域中,因此不会共享会话 cookie(以及扩展会话数据)。如果您想在 localhost 上独立运行单独的应用程序,这也是您应该做的:在单独的内部域上设置单独的虚拟主机。

        您也可以通过不直接使用$_SESSION 来存储您的数据,而是使用基于诸如$_SESSION['SCRIPT_NAME'] 之类的一些差异化因素的子键来纯粹在代码中解决问题。一个很简单的例子:

        $sessionKey = "default";
        if (strpos($_SESSION['SCRIPT_NAME'], "dir1/")) {
            $sessionKey = "dir1";
        }
        else if (strpos($_SESSION['SCRIPT_NAME'], "dir2/")) {
            $sessionKey = "dir2";
        }
        
        $_SESSION[$sessionKey]['mydata'] = 'foo';
        

        但是最后一个是我不推荐的非常不雅的解决方案。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-03-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-07-05
          • 1970-01-01
          相关资源
          最近更新 更多