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

时间:2013-04-30 19:39:01

标签: php

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

3 个答案:

答案 0 :(得分:2)

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

的手册

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

答案 1 :(得分:1)

如果只需要用户当前会话,您可以将信息存储在cookie中。然后你根本不需要存储它。

还有一些不利方面:

  1. 他们可能禁用了Cookie,因此您可能无法保存。
  2. 如果您下次需要这些信息,可能无法获取,因为它可能已被删除。
  3. 不安全,所以不要保存密码,银行信息等。
  4. 因此,如果需要这些信息,无论如何都需要,也许它不是可行的方式。如果信息是可选的,那么这将有效。

答案 2 :(得分:0)

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

  1. 您是否使用了多个没有粘性会话的网络服务器(负载平衡)?
  2. 你的磁盘空间不足吗?
  3. 你打算做那些吗?
  4. 如果是(对任何),则将其存储在数据库中。或者,更好的是,计算每个请求上的内容(或者像Memcached一样缓存它)。您还可以将这些内容存储在已签名的cookie中(以防止篡改)。