2010-11-25 80 views
51

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

我在寻找是否有任何其他限制,如最大长度,最大值等变量类型的。

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

在此先感谢!

回答

50

正如@Thariama所说,变量的数量没有限制;另外,对于可以存储在会话中的数据量没有限制(我已经看过几十MB的会话)。由于会话的大小变大,您将遇到各种各样的怪癖:PHP 5将整个会话反序列化到内存中session_start()(使用默认会话处理程序 - 当然,您可以使用make you own solution);有20 MB的会话和50个并发用户,你的脚本开始受到磁盘访问速度的严重限制(也就是“脚本启动速度慢得像糖浆一样 - 会话本身就占用一个GB RAM)。最后,我们专门设计了一个盒子,以便在RAM中保留尽可能多的会话,前端盒子通过NFS访问它们(尽管它对我们有帮助,但这对您来说可能有点过分)。

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

15

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

+0

问题不在于我可以拥有多少个会话变量,而是他们每个人可以存储多少数据。 – jolt 2010-11-25 08:26:44

8

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

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

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

+0

您可以在PHP中编写自己的会话处理程序来完成这一任务 - 尽管编译后的模块可能更有效。 – Piskvor 2010-11-25 08:33:30

+5

@shamittomar:如果downvoter没有留下评论,即使你问他们,他们也可能不会离开。对于单一的降价,我不会担心它 - 只是一个无知/随机/驱动器的downvoter。 – Piskvor 2010-11-25 08:38:35

3

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

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