0

所以这个问题有点复杂,让我解释一下。我的页面代码是这样运行的:

  1. 用户在搜索字段中输入查询并单击提交。

    1.1 jQuery 加载一个新的 body 来显示进度数据。

    1.2 jQuery 通过 AJAX 调用 process.php 并提供查询作为参数。

    1.3 jQuery 启动 setInterval 定期更新以获取进度数据,存储在 $_SESSION['prog'] 中,并显示出来。

  2. 当 process.php 完成时,jQuery 停止定期更新,显示最终信息并调用 AJAX 来清除 $_SESSION['prog'] 变量。

目前进度数据存储在一个变量中,就不同的用户而言这很好(因为不同的会话),但如果同一个用户要同时发出多个请求,$_SESSION['prog '] 变量将被交叉覆盖。

到目前为止,我已经想到了两种可能性来区分来自同一用户(同一会话)的每个请求的数据

  1. 让 jQuery 生成一些随机字符串并将其与查询一起发送(并希望避免冲突,尽管这不太可能)

  2. 进行 2 个 AJAX 调用,第一个请求 new_request_id,第二个发送查询和 new_request_id 作为参数。

  3. 在完成(完成)之前让 AJAX 从 PHP 返回一些东西。

我需要将每个浏览器窗口(每个请求)与每个正在运行的进程连接起来,因此在提交请求后我无法发回新的请求 ID,因为我不知道在浏览器窗口中使用 jQuery 获取哪些数据。顺便说一句,我会将 $_SESSION['prog'] 更改为 $_SESSION[request_id] -> request_id 是我正在寻找的。

它(request_id)可能是last_insert_id(),因为我为每个有效查询创建新的数据库条目,但我不知道如何将它返回到每个不同的用户窗口。

我需要这里的建议。刚开始用 PHP、AJAX 和 jQuery 编写代码,对会话不太了解。我应该如何解决这个问题?

抱歉缺少代码,我会根据要求粘贴。

4

3 回答 3

0

避免在 Ajax 请求中使用 Session 变量。改为使用 GET(或 POST)发送它们。即使调用Session_start();Ajax 请求并$_SESSION['prog']从那里获取,结果也可能出乎意料。

于 2013-09-24T16:47:07.643 回答
0

除了会话 ID 之外,您还可以为每个请求添加一个唯一 ID。例如。javascript / jquery中的uniqid()?

于 2013-09-24T16:16:53.940 回答
0

你需要以某种方式区分它们。例如,使用唯一 ID 自动编号字段。MySQLlast_insert_id()非常有用,可以正确处理并发请求。

于 2013-09-24T16:17:26.203 回答