0

* 这个位是用石头固定的 *


我们有 1 个网页,里面有 3 个 iFrame。所有 iFrame 都指向同一个脚本,但传递不同的查询字符串值。例如

  • 网页:mypage.html
  • iFrame1 : script.php?x=1
  • iFrame2 : script.php?x=2
  • iFrame3 : script.php?x=3

因此,当用户访问网页时,他们会调用 script.php 3 次。


* 问题 *


有没有办法让 script.php 知道它被同一个客户端/浏览器/人调用了 3 次,然后对这些调用进行排序或排队?例如

  • 第一次- 设置 ID 并保存到会话
  • 第二次- 从会话中获取 ID 并使用它
  • 第三次- 从会话中获取 ID 并使用它

目前发生在我身上的是 script.php 同时执行 3 次,每个 iFrame 都在设置自己的 ID。我希望他们都使用相同的 ID。

希望这有意义吗?

提前感谢您的帮助。

瑞安

4

2 回答 2

0

您需要使用 cookie 或 IP 地址跟踪用户,才能知道它是同一用户。如果你“保存到会话”,那么你必须已经使用了 cookie(否则它不是真正的会话),所以基本上在你创建新 ID 之前,你只需要检查 ID 是否已经存储在会话中。如果没有,则生成它并使用并存储在会话中。

编辑:您可以为此目的使用 PHPSESSIONID,因为只要会话保持不变,它就会相同。我怀疑您唯一需要调整的是代码中的 ID 生成,以确保尚未生成 ID。如果不是,则在会话中生成并保存,以便进一步的调用不会再次生成它,而是返回存储在会话中的值。但请记住,您可能会在这里遇到并发,并且第二个请求可能会您的第一个请求完成之前到达(这两者都会生成新的 ID),因此您应该使用锁定来防止这种情况,或者在足够的情况下使用 PHPSESSIONID 值。

于 2012-11-06T12:45:40.517 回答
0

浏览器不能保证 script.phps 的调用顺序。并且由于这些调用可能是并行的,因此无法将 SESSION_KEY 添加到这些响应之一,该响应可用于来自其他 iframe 的调用。

通过在 mypage.html 中使用 AJAX,并自己填充框架的内容,您可以更好地控制 script.php 的调用方式(顺序或调用,这些调用中的重叠)。如果唯一关心的是识别每个客户端,则在返回 mypage.html 时添加会话 cookie 可以轻松解决您的问题,因为此 cookie 将被发送到每次调用 script.php

于 2012-11-06T12:49:23.960 回答