相同IP地址但不同端口的相同会话ID

时间:2012-11-16 08:24:38

标签: apache session port

我在两台不同的计算机上运行我的网站(完全相同的源代码,甚至用户登录详细信息),每台计算机都有自己的apache。 用户可以通过我的端口转发设置访问这两个网站。

例如,10.10.10.10:81访问计算机A和10.10.10.10:82上的网站以访问计算机B上的网站。

用户访问其中任何一个都没有问题。直到用户想要使用相同的互联网浏览器同时访问它们。

登录计算机B上的网站会将他/她从计算机A的网站上注销。

为什么会这样? 因为相同的IP地址会自动生成相同的会话ID吗? 不同的端口不会有不同的会话ID? 怎么避免这个?手动生成会话ID会做什么?针对这个问题的任何其他解决方案?

谢谢。

3 个答案:

答案 0 :(得分:2)

Cookie不是特定于端口的。

这意味着如果在10.10.10.10上运行的服务器: 81 设置cookie sessionId = 123455,则相同的cookie将被发送到在10.10.10.10上运行的服务器: 80 < / strong>。它导致你描述的场景

  • 用户前往服务器10.10.10.10:81
  • 10.10.10.10: 81 服务器为该用户建立会话并设置cookie。
  • 用户登录服务器,现在可以使用该会话浏览。
  • 用户然后转到10.10.10.10: 80 并且浏览器发送由10.10.10.10设置的会话cookie:
  • 因为10.10.10.10: 80 对10.10.10.10上的会话一无所知: 81 它会建立一个新会话并设置新会话cookie覆盖旧会话< / LI>
  • 新会话cookie仅在10.10.10.10上有效: 80 ,因此用户已登出10.10.10.10:81

解决方案

  • (首选)为会话cookie配置不同的名称 OR
  • 配置服务器以在设置会话cookie标头时传递端口参数。这将使cookie特定于域+端口组合。如果可能,请避免使用此解决方案,因为并非所有浏览器都能正确处理此参数。

答案 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"
}