【问题标题】:$_SESSION across muliple virtual hosts$_SESSION 跨多个虚拟主机
【发布时间】:2015-07-22 16:57:29
【问题描述】:

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

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

【问题讨论】:

  • 我不确定$_SESSIONs 是否跨越虚拟主机(取决于您的提供商,它们是否将它们链接在一起),但只要您连接到同一个数据库,您可以只使用 cookie(存储链接到不同数据的随机标识符)。
  • angelcool.net,但是这个ID是一个比较长的随机生成的数字,是不是说我的co-host得到同一个数字的可能性很小?
  • 这不是关于 apache 虚拟主机,而是关于 php 会话存储。

标签: php session session-variables


【解决方案1】:

检查以下值:

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。除此之外,恕我直言,您有一个完美的答案。你得到了我的支持。
  • 在私人服务器上,同意。但是,我猜您可能不太可能访问共享服务器上的私有 memcache 守护进程。 (但自从我使用共享服务器以来已经有很多年了,所以谁知道。)
【解决方案2】:

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

如果会话 ID 相同并且使用会话的默认配置,我会说是。在会话 ID 很大的情况下,劫持的可能性非常低,但话又说回来,即使使用单个 虚拟主机,一切皆有可能。这完全取决于您的具体情况。

但出于所有实际目的,我敢说你会没事的。

祝你好运!

【讨论】:

    猜你喜欢
    • 2012-05-26
    • 2012-10-24
    • 2013-05-22
    • 1970-01-01
    • 1970-01-01
    • 2010-10-07
    • 1970-01-01
    • 2015-09-24
    • 2018-05-29
    相关资源
    最近更新 更多