跨多个虚拟主机使用$_SESSION

3

我了解到,如果我与另一个主机共享服务器(我有一个虚拟主机),那么所有主机共享的$_SESSION在所有主机之间都是相同的。

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


我不确定$_SESSION是否跨虚拟主机传递(这取决于您的提供商是否将它们链接在一起),但只要您连接到相同的数据库,您可以使用cookies(存储与不同数据相关联的随机标识符)。 - Dave Chen
angelcool.net,但这个ID是一个随机生成的相当长的数字,这并不意味着我的共同主持人得到相同数字的机会很小吗? - Алексей Наумов
这不是关于Apache虚拟主机的问题,而是关于PHP会话存储的问题。 - vp_arth
2个回答

3

请检查以下数值:

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,而不是共享服务器。


如果考虑_save_handler_ 的替代方案,第一件事(如果不是唯一的)我会考虑使用_memcached_。除此之外,我认为你已经给出了完美的答案。你得到了我的点赞。 - angelcool.net
在私有服务器上可以这样做,但是我猜在共享服务器上你可能不太可能有访问私有memcache守护进程的权限。(但是我已经很久没有使用过共享服务器了,所以谁知道呢。) - Alex Howansky

0
“这是否意味着其他主机可以访问我在$_SESSION中存储的某些变量?” 我会说是的,如果会话ID相同,并且正在使用默认会话配置。关于会话ID很大,劫持的可能性非常低,但在使用单个虚拟主机时仍然有可能发生任何事情,这完全取决于您的特定情况。 但是,根据所有实际目的,我敢说你没问题。 祝你好运!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接