会话变量是否在共享内存中?

时间:2013-11-24 22:31:40

标签: php session shared-memory

如果您熟悉VB.NET等编程语言,您就知道在不同的应用程序实例之间共享名称Shared-Memory。我的问题是:会话变量在PHP中的行为是否相同?


假设这种情况:

我在我的网站上的链接上点击了两次(这两个请求都使用相同的标题,相同的Cookie但在不同的时间发送)。 $_SESSION['num']设置为0,现在为:

在12:00:00.01服务器收到第一个请求
在12:00:00.03第一次请求开始其会话
在12:00:00.04,服务器收到第二个请求 在12:00:00.05第二次请求开始其会话 在12:00:00.06,第一个流程将10添加到$_SESSION['num']的值 在12:00:00.07第二个流程将10添加到$_SESSION['num']的值 在12:00:00.09两个过程都完成了。

现在,有两种可能的答案:$_SESSION['num']10$_SESSION['num']是20.答案是哪一个?

1 个答案:

答案 0 :(得分:2)

你的常见答案是“你测试时发生了什么?”

PHP将存储会话wherever you tell it to存储会话:文件,共享内存,数据库。默认情况下,它使用文件。当您调用session_start()时会从存储中检索会话,当您调用session_write_close()或脚本退出时,会将其写回存储。

如果会话处理程序获取存储上的锁定,则第二个实例将被阻止,直到第一个实例写回更改。默认文件处理程序acquires locks