$_SESSION跨多个虚拟主机


$_SESSION across muliple virtual hosts

我已经了解到,如果我与另一个主机共享服务器(我这样做,因为我有一个虚拟主机),那么所有主机共享相同的$_SESSION在所有主机上都是相同的。

这是否意味着其他主机可以访问我存储在$_SESSION中的一些变量?

检查以下值:

echo ini_get('session.save_handler');
echo ini_get('session.save_path');

如果你的save_handler是files,而你的save_path是一个像/var/lib/php5这样的公共目录,那么你很可能与服务器上的其他用户共享会话存储。您仍然受到会话哈希id性质的保护,但是如果您有敏感信息,您可能需要进行更改。您可以将save_handler更改为类似sqlite的东西,并提供您自己的本地数据库文件,或者简单地将save_path更改为您拥有的目录,并且具有最小的权限。你可以在。htaccess文件中修改save_path:

php_value session.save_path = '/path/to/my/session/directory'

或者在PHP源代码中:

ini_set('session.save_path', '/path/to/my/session/directory');

编辑:实际上,如果您有足够敏感的信息来保证这种更改,那么您应该使用VPS而不是共享服务器。

这是否意味着其他主机可以访问我存储在$_SESSION中的一些变量?

如果会话id相同并且使用会话的默认配置,我会说是的。在会话id较大的情况下,劫持的可能性非常低,但是任何事情都有可能发生,即使使用单个虚拟主机时也是如此。这完全取决于你的具体情况。

但是为了实际的目的,我敢说你会没事的。

祝你好运!