所以问题有点复杂,让我解释一下。我的页面代码运行如下:
用户在搜索字段中输入查询,然后点击提交。
1.1 jQuery加载一个新的主体来显示进度数据。
1.2 jQuery通过AJAX调用process.php并提供查询作为参数。
1.3 jQuery启动setInterval定期更新以获取存储在$ _SESSION ['prog']内的进度数据,并显示它。
当process.php完成后,jQuery会停止定期更新,显示最终信息并调用AJAX来清除$ _SESSION ['prog']变量。
目前,进度数据存储在一个变量中,就不同用户而言(由于会话不同),这是好的,但如果同一个用户同时发出多个请求,则$ _SESSION ['prog']变量将被交叉覆盖。
到目前为止,我已经考虑过两种可能性来区分每个请求的数据和同一个用户(同一个会话)
让jQuery生成一些随机字符串并将其与查询一起发送(并希望避免更改,尽管这不太可能)
进行2次AJAX调用,第一次请求new_request_id,第二次发送查询,new_request_id作为参数。
让AJAX在完成(完成)之前从PHP返回一些内容。
我需要将每个浏览器窗口(每个请求)连接到每个正在运行的进程,因此在提交请求后我无法发回新的请求ID,因为我不知道在浏览器窗口中使用jQuery获取哪些数据。顺便说一句,我会将$ _SESSION ['prog']更改为$ _SESSION [request_id] - > request_id是我正在寻找的。 p>
它(request_id)可能是last_insert_id(),因为我为每个有效查询创建了新的数据库条目,但我不知道如何将它返回到每个不同的用户窗口。
我在这里需要建议。才开始用PHP,AJAX和jQuery编写代码,对会话真的不太了解。我该如何解决这个问题?
很抱歉缺少代码,我会根据要求粘贴。
答案 0 :(得分:0)
除了会话ID之外,您还可以为每个请求添加唯一ID。例如。 uniqid() in javascript/jquery?
答案 1 :(得分:0)
你需要以某种方式区分它们。例如,使用唯一的ID自动编号字段。 MySQL有last_insert_id()
这非常有用,可以正确处理并发请求。
答案 2 :(得分:0)
避免在Ajax请求中使用Session变量。用GET(或POST)发送它们。即使在Ajax请求中调用Session_start();
并从那里获取$_SESSION['prog']
,结果也可能是意外的。