为每个用户存储$_session变量是不是很糟糕?


Is it bad to store $_session variables for every user?

问题基本上说明了一切。我的流量很大,每天大约有20万的点击量。我想将原始引用者(它们来自哪里)存储在会话变量中,以用于各种目的。这是一个好主意,还是我应该坚持使用数据库?

你可以同时做这两件事:)。PHP允许在脚本中定义会话的存储逻辑。这样就可以在数据库中存储会话。检查set_session_save_handler()手册

如果您使用负载平衡(或计划使用一次),使用数据库将有其优势。这样,所有web服务器都可以从同一个数据库(或集群)读取会话数据,负载均衡器不必担心哪个请求应该转发到哪个web服务器。如果会话数据存储在文件中(这是默认机制),那么负载平衡器必须将会话的每个请求转发到相同的物理web服务器,这要复杂得多,因为负载平衡器必须在HTTP级别上工作。

如果只在用户当前会话中需要,则可以将信息存储在cookie中。那么你根本不需要在你的端存储它。

也有一些缺点:

  1. 他们可能有cookies被禁用,所以你可能无法保存它。
  2. 如果你下次需要这些信息,你可能无法得到它,因为它可能已经被删除了。
  3. 不是超级安全,所以不要保存密码,银行信息等

所以,如果无论如何都需要这些信息,也许这不是正确的方法。如果信息是可选的,那么这将工作。

默认的PHP会话处理程序是文件处理程序。所以,相关的问题是:

  1. 您是否使用超过1个没有粘性会话(负载平衡)的web服务器?
  2. 是否磁盘空间不足?
  3. 你打算这么做吗?

如果是(to any),则将其存储在数据库中。或者,更好的是,计算每个请求的内容(或者将其缓存到Memcached之类的地方)。您还可以将内容存储在签名cookie中(以防止篡改)。