PHP并发请求导致多个会话

时间:2013-06-16 21:31:35

标签: php session concurrency request

我正在更新高流量网站上的现有访客跟踪脚本。我注意到脚本本身没有问题,但是当有多个请求时会发生什么。假设用户双击某些指向我网站的链接,最终会有效地同时发出两个请求。处理请求1并创建会话。然后脚本继续将访问者记录添加到数据库。同时,请求2正在处理中。它检查会话是否已设置且没有,因此它与请求1的作用相同。现在,我们在数据库的访问者表中有2个不同的会话和2个记录,而真正应该有一个。当前会话的会话ID最终来自最后一个完成的请求。

所以,我要做的是防止这种情况发生。即使来自同一访问者的100个多个并发请求,我希望只创建一个会话ID,最重要的是,只有一个记录(不是100条记录)插入到数据库的访问者表中。这涉及在几毫秒内确定已经发出了一个请求。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

您可以设置脚本的开头以强制执行特定会话。 http://www.php.net/manual/en/function.session-start.php

答案 1 :(得分:0)

我的java应用程序有以下解决方法。首次访问php服务器时,我发送阻塞ping调用,建立唯一的会话ID。之后我开始向php服务器发送并发请求。这也应该可以从网页中进行,例如在init块中。