使用会话存储站点配置是一种良好且安全的方式吗?


Is it a good and safe way using session to store site configuration?

我正在使用PHP和MySQL。有一些网站配置变量,我需要在每个页面,如site_url, site_path, contact_email, default_timezone等。

我没有在每次页面刷新时从数据库中检索这些值,而是在第一次页面访问时将它们存储在会话中。

我用这种方法已经有一段时间了,还没有遇到任何问题。我现在看到的唯一缺点是,如果一个值改变了,我必须关闭浏览器来清除会话,然后重新加载。(但这些值基本上是静态的)

我想知道这是否可以。这会引起其他问题吗?

我可以在会话中存储多少信息?有限制吗?

其中一些听起来像是全局值,对所有用户都是通用的。这不是会话值的好选择。最好将它们存储在某个文件中。如果每个会话的"site_url"都是相同的值,那么为50,000个会话存储"site_url"就没有意义了。浪费时间和空间。

会话存储应该专门用于每个用户的数据,这些数据不能在多个用户之间共享。

会话存储没有实际限制,除了您有多少磁盘空间,PHP的memory_limit,以及您愿意浪费多少cpu时间来解析站点上的每个点击数兆字节的数据。

一个会话可以存储多少没有限制但是php可以使用的内存是有限制的http://ca.php.net/manual/en/ini.core.php#ini.memory-limit

这取决于您期望有多少用户。在一次超过几十个的情况下,将这些信息存储在会话数据中并不是一个好主意。

在这种情况下,会话不应该真正充当缓存。问题是,如果你有1万个会话,那么会话数据就必须被复制1万次。这是没有效率的。

如果您的项目规模保证,您最好使用memcached(或APC缓存)之类的东西来存储给定时间段内的缓存值。如果您使用数据库类来处理配置,请让DB类从缓存中为您获取,以便所有调用代码的地方都可以这样做,而不必担心实现。您可以尝试使用文件作为缓存机制,但在这种情况下,您将不得不担心缓存超时和文件访问。