我已经使用session_start()
函数初始化会话。但会话变量不是跨子域共享的,所以我有example.com
和www.example.com
的不同会话。所以,现在我使用这个自定义函数:session_start()对于所有子域和本地主机
function my_session_start() {
$currentCookieParams = session_get_cookie_params();
$rootDomain = ".example.com";
session_set_cookie_params(
$currentCookieParams["lifetime"],
$currentCookieParams["path"],
$rootDomain,
$currentCookieParams["secure"],
$currentCookieParams["httponly"]
);
session_name("project_name_session");
session_start();
}
它工作正常,在生产服务器上,但在本地主机上调试时它不工作。所以我说第一$rootDomain
声明后,这些线路:
if($_SERVER['REMOTE_ADDR'] == "127.0.0.1") {
$rootDomain = "127.0.0.1";
}
现在,当我访问http://127.0.0.1/project_direcotory
工作。但是,当我访问http://localhost/project_direcotory
ID不。当通过localhost
访问时,$_SERVER['REMOTE_ADDR']
的值为::1
,这看起来像127.0.0.1的ipv6等价物,但是当我向条件添加|| $_SERVER['REMOTE_ADDR'] == "::1"
,然后将$rootDomain
设置为"127.0.0.1"
或"::1"
时,什么都不会发生。
我也想,如果它也适用于本地IP地址,如192.168.1.100
从同一网络上的其他机器访问时。
如果$rootDomain
的值没有硬编码,但是例如从$_SERVER
变量派生出来,这也会很好。
是否有一种方法可以让所有子域具有相同的会话,这也适用于本地主机的所有等价物?
看一看:ini_set('session.cookie_domain','。'。yourdomain);记住点,所以你的会话也可以看到所有子域。不知道这是否足够,但值得看看:)。 BR。 – 2014-11-02 07:00:30