4

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

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

用户可以毫无问题地访问其中任何一个。直到用户想使用同一个互联网浏览器同时访问它们。

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

为什么会这样?因为相同的 IP 地址会自动生成相同的会话 ID?不同的端口不会有不同的Session ID?如何避免这种情况?手动生成Session ID会怎样?这个问题还有其他解决方案吗?

谢谢你。

4

3 回答 3

2

Cookie 并不特定于某个端口。

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

  • 用户访问服务器 10.10.10.10: 81
  • 10.10.10.10:81服务器为该用户建立会话并设置 cookie。
  • 用户登录到服务器,现在可以使用会话浏览。
  • 用户然后转到 10.10.10.10:80 ,浏览器发送由10.10.10.10:81设置的会话 cookie
  • 因为 10.10.10.10:8010.10.10.10:81上的会话一无所知,它会建立一个新会话并设置新会话 cookie 覆盖旧会话
  • 新的会话 cookie 仅在 10.10.10.10:80 有效,因此用户在10.10.10.10:81注销

解决方案

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

您没有提供很多信息,但如果使用 cookie 维护会话,并且使用相同的域名来访问两个站点,那么 cookie 将应用于对两个站点的请求。

当用户从站点 A 切换到站点 B(使用相同的浏览器实例)时,会话 cookie 将被发送,但不会与现有会话 ID 匹配 - 因此站点 B 将生成一个新的会话 ID 并设置为“ “会话 cookie。

解决此问题的两种通用方法 - 为两个站点使用两个不同的域名,或以其他方式区分会话 cookie。您可以通过为站点 A 和站点 B 中的会话 cookie 配置不同的名称来做到这一点。这样做的细节取决于用于创建站点 A 和 B 的技术 - 您尚未告诉我们关于。

于 2012-11-16T08:55:11.997 回答
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"
}
于 2014-02-14T07:28:19.743 回答