Cookie,域名,端口

时间:2014-04-30 06:29:11

标签: java javascript cookies firebug

我有两个网站,两个网站位于同一个域名下。

  1. https://www.fat.service.map.global.com:24536
  2. https://fat.test.service.global.com
  3. 第一个网址 - https://www.fat.service.map.global.com:24536将父域中的Cookie设置为(name=lang, value=en, domain=.global.com)。

    第二个网址 - https://fat.test.service.global.com需要访问此相同的Cookie。但是cookie从第二个URL的后端代码中看不到(null)。

    但是当我在Firebug中检查cookie时,它会显示cookie的值,域值为.global.com(这是正确的)

    那么为什么我无法访问第二个URL后端的cookie?

    任何人都可以对此有所了解吗?

1 个答案:

答案 0 :(得分:0)

您对.global.com的假设是正确的,但在设置Cookie时需要考虑更多事项。即例如,可以将cookie限制在特定端口(例如,通过Set-Cookie2标头设置cookie时,请参阅RFC 2965)或路径。

我已经在我的本地机器上使用Apache + PHP测试了你的案例,它对我来说很好。

我的Apache配置:

# Listen on different ports
Listen 80
Listen 24536

# Listen for virtual host requests on all IP addresses
NameVirtualHost *:80
NameVirtualHost *:24536

<VirtualHost *:24536>
  DocumentRoot /path/to/my/document/root
  ServerName www.fat.service.map.global.com
</VirtualHost>

<VirtualHost *:80>
  DocumentRoot /path/to/my/document/root
  ServerName fat.test.service.global.com
</VirtualHost>

在包含以下内容的文档根目录中创建了一个PHP脚本'test.php':

<?php
  // Output all cookies
  var_dump($_COOKIE);

  // Set the cookie when the host is 'www.fat.service.map.global.com'
  if (strpos($_SERVER['HTTP_HOST'], 'www.fat.service.map.global.com') !== false) {
    setcookie('lang', 'en', time() + 3600, '/', '.global.com');
  }
?>

这会生成以下用于设置cookie的标题:

Set-Cookie: lang=en; expires=Sat, 27-Feb-2016 09:23:33 GMT; Max-Age=3600; path=/; domain=.global.com

并给了我两个域的以下输出: Cookie available at www.fat.service.map.global.com

Cookie available at fat.test.service.global.com

您配置的唯一区别是我没有使用HTTPS,即我没有将端口443用于第二个虚拟主机。虽然我认为这没有任何区别,因为您的两个域都是通过HTTPS提供的。