【问题标题】:How to access php sessions on different computers如何访问不同计算机上的 php 会话
【发布时间】:2011-08-10 19:31:27
【问题描述】:

我正在做一些关于在 php 中使用会话的练习。我是这样设置的:

$_SESSION['log_users'][] = array(array('Username'=>$username))

我尝试过它。并发现当我使用不同的 ip 访问它时,正在生成的会话是不同的。使用同一个浏览器,也就是firefox。

这是我所做的:

  1. 设置我的路由器,以便其他人能够通过使用我的外部 IP 地址访问我正在进行的练习。
  2. 然后我打开了 localhost 版本的练习:

    http://localhost/exercise/sessions.php

  3. 然后是使用外部ip地址的那个:

    http://201.xxx.xxx/exercise/sessions.php

  4. 然后我填充了每个浏览器选项卡上的会话数组。并发现这两个中的每一个都保留了不同版本的会话。使用print_r($_SESSION['log_users'])发现的

这真的是它应该表现的方式吗?有什么我可以做的,以便只有一个版本的会话吗?我目前正在使用 Wampserver 2.1

【问题讨论】:

  • 有很多方法可以解决这个问题,但是很复杂。你确定你需要这个吗?
  • 是的,但如果有更容易的替代方案。那我也想做。
  • 据我所知,没有办法不更改每个 URL 并将会话 ID 放入其中。请参阅php.net/manual/en/session.idpassing.php 了解其工作原理
  • Stackoverflow 本身使用 HTML5 全局存储来维护跨多个域的授权令牌。有关少量文档,请参阅 stackauth.comstackapps.com。但这对于您的目的来说可能是矫枉过正。

标签: php session localhost wampserver


【解决方案1】:

会话存储在服务器端,并在客户端创建会话cookie,以识别保存当前会话ID的浏览器的当前会话。

会话 cookie 是根据您用于访问该站点的域存储的。

由于您使用不同的域,一个是localhost,另一个是ip,这将创建两个不同的会话。

当您通过localhost 域访问页面时。它将在域localhost 上创建会话并存储会话cookie。如果您访问同一域系统上的另一个页面,将检查会话 cookie 是否存在,它会恢复旧会话并且不会创建新会话。

同时,如果您通过ip 访问,则不会为此ip 存储会话cookie,但系统会假定此用户没有活动会话,并将启动一个新会话,并且会话cookie 被存储为基于此ip

这就是会话的工作方式。

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    会话 cookie 绑定到一个域名。首次访问时,会绑定localhost域。

    如果您随后将浏览器指向 201.xx.xx.xx 地址,则域名将不再匹配。您的浏览器不会再次发送此 cookie。这就是将生成新会话的原因。即使它实际上是同一台服务器。

    【讨论】:

      【解决方案3】:

      在您的情况下,只有 $_SESSION 对您没有帮助。您也应该尝试使用 $_SESSION 和 Database。

      您应该同步您的会话和数据库会话记录。

      系统将检查您在数据库中的条目。如果您有可用的条目,那么它将直接为您的站点生成会话。这样,所有浏览器只能使用一次登录。

      【讨论】:

        猜你喜欢
        • 2013-10-08
        • 1970-01-01
        • 1970-01-01
        • 2019-11-09
        • 2013-08-23
        • 1970-01-01
        • 1970-01-01
        • 2015-09-10
        • 2011-10-31
        相关资源
        最近更新 更多