我在两台不同的计算机上运行我的网站(完全相同的源代码,甚至用户登录详细信息),每台计算机都有自己的apache。 用户可以通过我的端口转发设置访问这两个网站。
例如,10.10.10.10:81访问计算机A和10.10.10.10:82上的网站以访问计算机B上的网站。
用户访问其中任何一个都没有问题。直到用户想要使用相同的互联网浏览器同时访问它们。
登录计算机B上的网站会将他/她从计算机A的网站上注销。
为什么会这样? 因为相同的IP地址会自动生成相同的会话ID吗? 不同的端口不会有不同的会话ID? 怎么避免这个?手动生成会话ID会做什么?针对这个问题的任何其他解决方案?
谢谢。
答案 0 :(得分:2)
Cookie不是特定于端口的。
这意味着如果在10.10.10.10上运行的服务器: 81 设置cookie sessionId = 123455,则相同的cookie将被发送到在10.10.10.10上运行的服务器: 80 < / strong>。它导致你描述的场景
答案 1 :(得分:0)
您没有提供大量信息,但如果使用Cookie维护会话,并且使用相同的域名来获取对这两个站点的访问权限,则Cookie将应用于对两个站点的请求。
当用户从站点A切换到站点B(使用相同的浏览器实例)时,将发送会话cookie,但不会与现有的会话ID匹配 - 因此站点B将生成新的会话ID,设置为“会话”cookie。
解决此问题的两种常用方法 - 为两个站点使用两个不同的域名,或以其他方式区分会话cookie。您可以通过为站点A和站点B中的会话cookie配置不同的名称来实现此目的。执行此操作的具体细节取决于用于创建站点A和B的技术 - 您尚未告诉我们约。
答案 2 :(得分:0)
这是解决它的例子:
127.0.0.1:110
session_start();
$_SESSION['ss'] = 'll';
echo '<pre>';
var_dump( $_SESSION);
ouput:
array(1) {
["ss"]=>
string(2) "ll"
}
127.0.0.1:111
session_start();
echo '<pre>';
var_dump( $_SESSION);
ouput:
array(1) {
["ss"]=>
string(2) "ll"
}
更改会话后的路径
127.0.0.1:110
session_save_path('/tmp/sess');//This line must be wrote before session_start(),
session_start();
$_SESSION['ss'] = 'll';
echo '<pre>';
var_dump( $_SESSION);
ouput:
array(1) {
["ss"]=>
string(2) "ll"
}
127.0.0.1:111
session_start();
echo '<pre>';
var_dump( $_SESSION);
ouput:
array(0) {
}
127.0.0.1:111
session_save_path('/tmp/sess');
session_start();
$_SESSION['ss'] = 'll';
echo '<pre>';
var_dump( $_SESSION);
ouput:
array(1) {
["ss"]=>
string(2) "ll"
}