我正在做一些关于在php中使用会话的练习。我这样设置:
$_SESSION['log_users'][] = array(array('Username'=>$username))
我试着尝试一下。并且发现当我使用不同的ip访问它时,正在生成的会话是不同的。使用相同的浏览器时,这是firefox。
这是我做的:
然后我打开了练习的localhost版本:
然后使用外部IP地址:
然后我在每个浏览器选项卡上填充了会话数组。并发现这两者中的每一个都保持不同版本的会话。使用print_r($_SESSION['log_users'])
这真的是它应该表现的方式吗?有什么我可以这样做,只有一个版本的会话?我目前正在使用Wampserver 2.1
答案 0 :(得分:4)
会话存储在服务器端,并在客户端创建会话cookie,以识别保存当前会话ID的当前浏览器会话。
会话cookie基于您用于访问网站的域存储。
由于您使用的是不同的域名,因此localhost
为ip
而另一个域名为localhost
,这将创建两个不同的会话。
当您通过localhost
域访问网页时。它将在域ip
上创建会话和存储会话cookie。如果您访问同一域系统上的另一个页面,将检查会话cookie是否存在,它将恢复旧会话,并且不会创建新会话。
如果您通过ip
访问同一时间,则此ip
尚未存储会话cookie,但系统会假定此用户没有活动会话,并将启动新会话和会话基于此{{1}}存储Cookie。
这是会话的工作方式。
希望这有帮助。
答案 1 :(得分:2)
会话cookie绑定到域名。首次访问时,它将绑定到localhost
域。
如果您将浏览器指向201.xx.xx.xx地址,则域名将不再匹配。并且您的浏览器不会再次发送此cookie。这就是生成新会话的原因。即使它实际上是同一台服务器。
答案 2 :(得分:0)
在您的情况下,只有$ _SESSION对您没有帮助。你应该尝试使用$ _SESSION和数据库。
您应该同步会话和数据库会话记录。
系统将检查您在数据库中的条目。如果您有可用的条目,那么它将直接为您的网站生成会话。这样,只有一个登录可用于所有浏览器。