gpt4 book ai didi

php - ajax状态检查的实现

转载 作者:搜寻专家 更新时间:2023-10-31 21:45:02 26 4
gpt4 key购买 nike

我正在与 race condition 作斗争PHP 中的保护。

我的应用程序是用 symfony 1.4 编写的,PHP 会锁定 session 数据,直到页面完成处理。我有一个长时间运行(约 10 秒)的登录脚本,我想显示一个进度条,向用户显示他们在等待时正在做什么。 (我想实际显示正在执行的操作,而不是使用标准的 [faux] 加载栏。)

每当脚本调用 session_start() 时,PHP 都会锁定该用户的 session 数据,直到该脚本完成。这可以防止我的状态检查 ajax 调用在运行时间较长的脚本完成之前返回任何内容。 (关于为什么我的 ajax 调用不是异步的,我的问题是 here。)

我已经设计了一种方法来执行此操作,但我想确保这种方法对于一般用途而言足够安全(即,这不是银行应用程序)。

我的想法是:

  1. 在验证用户名和密码时(在长登录脚本开始之前),会在客户端计算机上设置一个具有唯一标识符的 cookie。
  2. 此相同的唯一标识符与客户端 IP 地址一起写入服务器上的文件。
  3. 当长登录脚本运行时,它将使用登录过程的状态更新该文件。
  4. ajax 状态检查将在不使用 session_start() 的特殊页面上对服务器执行 ping 操作。此页面将获取 cookie 值和客户端 IP,并检查服务器端文件是否有任何状态更新。

此解决方案是否存在任何明显的问题?

同样,从安全角度来看,即使有人破解了这一切,他们得到的也只是一个代表登录进度状态的数字。

最佳答案

我认为您提出的方法没有任何内在的错误。

但是如果你的机器有APC安装后,您可以使用 apc_storeapc_fetch 将您的状态存储在一种共享内存中,而不是写入磁盘。使用 apc_store(SID, 'login not started') 来初始化和更新内存中的请求状态,然后使用 apc_fetch(SID) 在后续请求中检索它。

还有其他共享内存系统,包括Apache ,甚至数据库连接可能更简单。

关于php - ajax状态检查的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5113012/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com