我应该使用数据库会话还是本机PHP文件会话?

9
我刚从自己的MVC框架转换到一个社区支持的框架(CodeIgniter)。我正在将我的会话转换为CodeIgniter函数,并注意到它们默认情况下会将会话数据存储在加密cookie中。他们提供的替代方案是数据库会话,但不像本地PHP库那样支持服务器端文件会话。
现在,在我的网站上,我将建立一个安全的后端面板,所以加密cookie似乎不是明智的选择,但我不想不必要地连接到我的数据库,因为它不太快(共享主机)。
我想知道他们不支持本地会话的原因是什么,以及数据库会话服务器端文件会话通常被认为是更好的选择。
谢谢。
1个回答

12

基本上,为了存储会话数据,人们通常使用以下三种解决方案之一:

  • 文件(默认)
  • 数据库
  • 内存缓存

文件是最常用的方法,因为它是默认选项,在大多数情况下都能很好地工作,但至少有一种情况它无法胜任:当你有多个服务器时,用户被平衡负载到这些服务器上时(即1个用户不总是在同一台服务器上)。

在这种情况下,需要一个中央/共享位置来存储会话数据,数据库就符合这种描述;而且设置也很容易,PHP应用程序通常与数据库协同工作。

由于数据库不适合扩展性特别好,特别是对于写入操作而言,有时候你会使用一些像memcached这样的东西:一种将数据存储在RAM中的机制(更快),跨越尽可能多的服务器(扩展性好)。


那么你应该使用哪种解决方案?

好吧,你处于哪种情况?

  • 如果一个用户总是在同一台服务器上,那么文件是可以的。
  • 如果你的应用程序需要一个数据库,你可以在数据库中存储会话数据:不需要任何额外的设置(例如,Drupal默认采用此方法)。
  • 如果你有非常大量的流量,那么使用memcached可能是最佳解决方案,尽管需要更多的设置...

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