如果您熟悉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.答案是哪一个?
答案 0 :(得分:2)
你的常见答案是“你测试时发生了什么?”
PHP将存储会话wherever you tell it to存储会话:文件,共享内存,数据库。默认情况下,它使用文件。当您调用session_start()时会从存储中检索会话,当您调用session_write_close()或脚本退出时,会将其写回存储。
如果会话处理程序获取存储上的锁定,则第二个实例将被阻止,直到第一个实例写回更改。默认文件处理程序acquires locks。