【发布时间】:2011-02-25 02:39:19
【问题描述】:
我正在与 PHP 中的race condition 保护作斗争。
我的应用程序是用 symfony 1.4 编写的,PHP 会锁定会话数据,直到页面完成处理。我有一个长时间运行(约 10 秒)的登录脚本,我想显示一个进度条,向用户展示他们在等待时正在做什么。 (我想实际显示正在执行的操作,而不是使用标准的 [faux] 加载栏。)
每当脚本调用session_start() 时,PHP 都会锁定该用户的会话数据,直到该脚本完成。这可以防止我的状态检查 ajax 调用在更长的运行脚本完成之前返回任何内容。 (关于为什么我的 ajax 调用不是异步的问题是here。)
我已经设计了一种方法来做到这一点,但我想确保这种方法对于一般用途来说足够安全(即,这不是银行应用程序)。
我的想法是:
- 在验证用户名和密码时(在长登录脚本开始之前),在客户端计算机上设置一个带有唯一标识符的 cookie。
- 此唯一标识符与客户端 IP 地址一起写入服务器上的文件。
- 当长登录脚本运行时,它将使用登录过程的状态更新该文件。
- ajax 状态检查将在不使用
session_start()的特殊页面上ping 服务器。此页面将获取 cookie 值和客户端 IP,并检查服务器端文件是否有任何状态更新。
这个解决方案有什么明显的问题吗?
再次,从安全角度来看,即使有人破解了这个,他们得到的只是一个代表登录进度状态的数字。
【问题讨论】:
标签: php ajax symfony-1.4 race-condition