如何在PHP会话中跟踪来自同一用户的多个请求数据?

时间:2013-09-24 16:13:03

标签: php jquery ajax session progress

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

  1. 用户在搜索字段中输入查询,然后点击提交。

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

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

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

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

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

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

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

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

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

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

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

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

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

3 个答案:

答案 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'],结果也可能是意外的。