会话变量是否有限制?

时间:2010-11-25 08:21:22

标签: php session-variables

正如标题所说,会话变量是否存在限制(如果有的话),或者它们被视为通常的变量,并且可以存储相同数量的数据?

我正在寻找除了最大长度,最大值等变量类型之外是否还有其他限制。

P.S。如果问题不清楚,请告诉我。

提前致谢!

4 个答案:

答案 0 :(得分:51)

正如@Thariama所说,变量的数量没有限制;此外,您可以在会话中存储的数据量没有限制(我已经看到会话数十MB)。

随着会话的大小变大,你会遇到各种怪癖:PHP 5将整个会话反序列化到session_start()的内存中(使用默认的会话处理程序 - 你可以make you own solution,当然);使用20 MB会话和50个并发用户,您的脚本开始受到磁盘访问速度的严重限制(例如,“脚本启动速度慢,因为糖蜜” - 仅会话就会占用GB的RAM);最后,我们专门用一个盒子在RAM中保存尽可能多的会话,前端盒通过NFS访问它们(尽管在我们的情况下这对你有帮助,但这对你来说可能有点过分了。)

请注意,对于磁盘上的许多并发用户和会话存储,会话临时文件的数量可能会导致文件系统限制出现问题(例如,在遇到stat() {{的问题之前,一个目录中可以有多少文件3}})或其他限制(我们曾经发现配置框的难度很大,只能同时允许4096个打开的文件)。这些都不是特定于会话的,但可以通过会话处理来触发。

答案 1 :(得分:15)

不,会话可能拥有的空间(或会话可能拥有多少变量)没有限制。 唯一的限制是您的计算机上的规格,这是由您的php.ini中的可用memory_limit定义的。 请注意,此空间将在所有用户的所有会话之间共享。

答案 2 :(得分:8)

它完全特定于您的网络服务器。对于Apache,请看这里:

http://httpd.apache.org/docs/trunk/mod/mod_session.html

使用mod_session_dbd甚至允许会话存储在数据库中。因此,可以克服每个会话1个文件的物理限制。此外,Apache可以配置为跟踪存储在特定服务器或服务器组上的每个用户会话,以实现可伸缩性。

答案 3 :(得分:3)

简单的答案是否定的。 (也就是说,它们没有比任何其他PHP变量更多的限制......必须适合内存等)。

但是,请记住,$_SESSION数据存储在某处,默认情况下是每个会话在一个文件中的序列化数据。因此存在实际限制。您不希望在其中存储大量信息,因为它们将在使用session_start()的每个页面上从数据存储中加载/保存。