2011-04-22 67 views
4

我正在做一些关于在php中使用会话的练习。我这样设置:如何在不同的计算机上访问php会​​话

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

我试着对它进行试验。并发现当我使用不同的IP访问它时,正在生成的会话是不同的。在使用相同的浏览器,这是Firefox。

这里是我做过什么:

  1. 设置我的路由器,这样别人就可以访问我通过使用我的外部IP地址的工作锻炼。
  2. 然后我打开了锻炼的本地主机版本:

    http://localhost/exercise/sessions.php

  3. 然后使用外部IP地址的一个:

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

  4. 我则填补了session数组在每个浏览器标签上。并且发现这两者中的每一个保持会话的不同版本。通过使用print_r($_SESSION['log_users'])

发现这真的是应该的行为方式?有什么我可以做的,只有一个版本的会话?我目前使用Wampserver 2.1

+0

有办法解决这个问题,但你很复杂。你确定你需要这个吗? – 2011-04-22 06:56:34

+0

是的,但如果有替代品可能会更容易。然后我想这样做。 – user225269 2011-04-22 07:00:17

+0

据我所知,如果不改变每个URL并将会话ID放入其中,就没有办法。关于它是如何工作的,请参见http://www.php.net/manual/en/session.idpassing.php – 2011-04-22 07:04:41

回答

4

会话存储在服务器端和客户端创建一个会话cookie来识别浏览器的当前会话持有当前的会话ID。

会话cookie根据您使用访问网站的域存储。

由于您使用的是不同的域,因此您需要创建两个不同的会话,其中一个是localhost,另一个是ip

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

虽然同一时间,如果您通过ip进行访问,会话cookie不会存储在这个ip,但系统会假定此用户没有活动会话,并且将启动一个新会话并基于此存储会话cookie ip

这是怎样的方式会话工作。

希望这会有所帮助。

2

会话cookie被绑定到一个域名。当你第一次访问它时,它将被绑定到localhost域。

如果你那么你的浏览器指向201.xx.xx.xx地址,域名将不再匹配。而且你的浏览器不会再发送这个cookie。这就是为什么会产生一个新的会话。尽管它实际上是同一台服务器。

0

在你的情况下,只有$ _SESSION不会对你有所帮助。你应该尝试使用$ _SESSION和数据库。

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

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

相关问题