【发布时间】:2012-03-08 05:22:22
【问题描述】:
我一直在尝试维护两个子域之间的会话变量,但发现这是不可能的。我最终创建了 2 个最小的 PHP 网页作为测试平台,我称之为“测试 1”的只是设置了
$_SESSION['test'] = "Fred";
并有一个指向“test 2”的超链接,它只是尝试回显 $_SESSION['test'] 的值来证明它是否有效。我将“测试 1”放在我的 www 域中,将“测试 2”放在我的子域中。我尝试了来自各种来源的标题中应该包含的各种版本。以下是主要的 3 个(当然还有它们的变体):
ini_set('session.cookie_domain',substr($_SERVER['SERVER_NAME'],strpos($_SERVER['SERVER_NAME'],"."),100));
session_start();
或
ini_set('session.cookie_domain','mydomain.com');
session_start();
或
ini_set('session.cookie_domain', PHP_INI_ALL);
session_start();
或
session_set_cookie_params(0, "/", ".mydomain.com", false);
session_start();
我发现在每种情况下我都会得到相同的结果。会话不会跨子域进行,并且页面测试 2 不知道我将 $_SESSION['test'] 设置为什么值。然而,网上似乎有很多确定性,即上述方法之一应该有效。知道会发生什么,特别是因为我使用最少的页面来测试机制(我看不到任何副作用)?顺便说一句,我在共享服务器上,如果这在这里相关的话。
感谢您的想法。弗兰克。
编辑。 我修好了。问题是由 Suhosin 引起的。请参阅本页底部的详细答案。
【问题讨论】:
标签: php session-variables session-cookies subdomain