就像标题所说,会话变量是否存在限制(如果有)?它们是否被视为“普通”变量并且可以存储相同数量的数据?
我正在寻找除最大长度、最大值等变量类型限制以外的任何其他限制。
P.S. 如果问题不清楚,请告诉我。
提前感谢!
就像标题所说,会话变量是否存在限制(如果有)?它们是否被视为“普通”变量并且可以存储相同数量的数据?
我正在寻找除最大长度、最大值等变量类型限制以外的任何其他限制。
P.S. 如果问题不清楚,请告诉我。
提前感谢!
正如@Thariama所说,变量数量没有限制; 此外,您可以在会话中存储的数据量也没有限制(我见过大小为数十MB的会话)。
随着会话大小的增加,您会遇到各种怪异问题:PHP 5将整个会话反序列化到内存中的session_start()
(使用默认会话处理程序 - 当然,您可以自己创建解决方案); 对于20 MB的会话和50个并发用户,脚本开始受到磁盘访问速度的严重限制(也称为“脚本启动缓慢”-仅会话就会占用1GB RAM);最终,我们专门为保持尽可能多的会话而分配了一个盒子,前端盒子通过NFS访问它们(虽然这对我们有所帮助,但对您来说可能过度了)。
请注意,对于许多并发用户和会话存储在磁盘上的情况,会话临时文件的数量可能会导致文件系统限制(例如,在运行stat()
性能之前,一个目录中可以有多少个文件),或其他限制(我们曾经发现过一台机器配置成一次只允许打开4096个文件)。所有这些都不是真正会话特定的,但可能由会话处理引发。
不,会话所占用的空间没有上限(或者一个会话可以拥有多少个变量没有限制)。
唯一的限制是您计算机的规格,这由php.ini配置文件中可用的memory_limit定义。
请注意,这个空间将被所有用户的所有会话共享。
这完全取决于您的Web服务器。对于Apache,请查看此处:
http://httpd.apache.org/docs/trunk/mod/mod_session.html
它甚至可以通过使用mod_session_dbd将会话存储在数据库中。因此,可以克服每个会话一个文件的物理限制。此外,Apache可以配置为跟踪存储在特定服务器或一组服务器上的每个用户会话,以实现可扩展性。file_get_contents();
从 HTML 文件中获取的。大多数情况下,它不会超过几 KB,但在将来,我可能需要在此会话变量中加载更大的模板。 - tomsseisums$_SESSION
数据不是免费的。您放入其中的所有内容都将在每个页面视图上加载,即使您不使用它。如果您需要在每个页面视图上访问该模板数据(因此以某种形式加载到内存中),那么它来自会话还是其他地方并不重要。我个人不会使用会话来处理这种类型的数据,但这只是我的看法。 - Matthew