我已经了解到,如果我与另一个主机共享服务器(我这样做,因为我有一个虚拟主机),那么所有主机共享相同的$_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较大的情况下,劫持的可能性非常低,但是任何事情都有可能发生,即使使用单个虚拟主机时也是如此。这完全取决于你的具体情况。
但是为了实际的目的,我敢说你会没事的。
祝你好运!