首先,PHP 会话默认情况下不存储在内存中,它们存储在磁盘上,因此您写入的每个块/会话都将占用磁盘空间而不是内存(直到您使用 PHP 读取会话数据)。
是的,你可能会更有效率,但如果你想扩展,这就是为什么:
在会话中存储数据
在会话中存储一些数据是完全可以接受的。从理论上讲,没有限制(尽管我从未尝试打破它甚至推动它,只是转向更有效的解决方案)。但是,您将受到磁盘空间和 PHP 的限制memory_limit()
。
通常,存储在会话中的数据包括以下内容:
- 用户名
- 哈希
- 注册日期
- 其他变量(用户组 ID/密钥等)
- 闪信
- (不是密码!)
但是,有一个权衡。如果您的流量(和使用量)增加并且您将大量数据存储在 中$_SESSION
,您很可能会开始看到问题,包括磁盘和内存使用情况。
我认为您的建议没有任何问题,但除了您列出的项目以及上述示例重叠的地方之外,还需要小心。
如果您想扩展(水平)并保留基于磁盘的会话,那么您可以选择(粘性会话或存储区域网络是一对),因为一台服务器上的磁盘不会存储与另一台服务器上的磁盘相同的会话。
会话数据位置
您可以通过调用找到 PHP 存储会话数据的位置:session_save_path()
或在 CLI 上:
php -r 'echo session_save_path(), "\n";'
您没有提到您的操作系统,但会话文件的常见位置(跨不同的操作系统类型)是:
/tmp
/var/lib/php5/
/var/lib/php/session
c:/wamp/tmp
存储在磁盘上的会话通常具有如下所示的文件名ls -al
:
-rw------- 1 www www 0 2013-07-09 20:12 sess_bdsdjedmvtas5njhr5530b8rq6
值得注意的是,通常会有垃圾收集进程在特定时间段后清除死会话。它确实因操作系统而异,但它们通常存在于各种基于 LAMP 的安装中。
其他会话存储选项/方法
在您的数据库
中,会话数据通常存储在数据库中而不是本地磁盘上,这适用于具有合理流量水平的微型、小型和(取决于它是如何完成的)中型站点。
像任何其他解决方案一样,它具有优点和缺点(例如能够通过运行查询而不是从中删除会话文件来禁止/踢出用户/tmp
)
在
更大、(更高流量)站点的内存中,特别是在并发用户量很高的地方,内存可以更快地读取/写入非常频繁访问的变量或数据,而不是给数据库增加过多的负载。它可以并且仍然应该写入数据库(请参阅直写缓存),但也可以保存在内存中以进行有效访问。
一种特别有价值的技术是内存缓存。一个广泛使用的与 PHP 兼容的开源解决方案示例是Memcached,它可以在一台服务器或多个 [分布式] 上使用。我已经看到小公司和大公司都在使用它,你只需要看看谁使用它/贡献...