【问题标题】:Ordering multiple calls to the same script对同一个脚本进行多次调用
【发布时间】:2012-11-06 12:42:03
【问题描述】:

* 此位固定在石头上 *


我们有 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。

希望这有意义吗?

提前感谢您的帮助。

瑞恩

【问题讨论】:

  • 你要求将相同的 id 传递给所有三个?...据我所知?
  • 不行,script.php需要自己创建ID
  • 或者...为了更好地解释... script.php 需要为用户创建它自己的 ID 并在会话中设置它。对 script.php 的进一步调用应使用相同的 ID。如果这有意义?
  • 您可以通过 IP 地址跟踪用户并检查它....在 script.php 中。如果用户第一次点击而不是生成一个数字并将其存储在会话中。如果同一用户第二次点击,则检查 IP 是否相同。如果它与使用相同的 Session 值相同,否则反之亦然,您可以生成新的。希望对您有所帮助。

标签: php session queue


【解决方案1】:

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

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

【讨论】:

  • 我的计划是在第一次请求 script.php 时创建一个新的数据库 ID 并将其保存在会话中。然后在第二个和第三个请求中获取此 ID。但也许最好放弃新的数据库 ID 并使用 $_COOKIE['PHPSESSID'] 因为它对于所有 3 个请求都是相同的?这是你说的吗?
  • 如果我只使用 PHPSESSIONID 那么......将来再次使用相同的 PHPSESSIONID 的可能性有多大?我的网站获得高流量。换句话说,PHPSESSIONID 有多独特? (他们是否考虑了日期、时间、IP 地址等?)
  • 您不能假设 PHPSESSIONID 是一次性令牌。如果您需要该功能,您应该考虑创建自己的 ID 并在比 /tmp 更永久的存储中跟踪它。请记住会话 ID 必须是随机的(而不是顺序的)以避免会话劫持。一般见session docs,以及session_id()等函数及相关。
【解决方案2】:

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

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

【讨论】:

  • 不幸的是,我无法控制 mypage.html。我可以控制的位是 script.php
  • 是的,刚刚看到,抱歉没有意识到。然后,除非您在对 html 文件的请求设置的请求中有一些好东西(例如:您可以配置为 html 提供服务的网络服务器来设置 cookie 吗?),所以除非您有这个机会,否则您需要破解。在很短的时间内来自同一个用户代理、同一个 IP 的请求……这可以作为一个会话来解决。我不熟悉 PHP 如何分配 sessionkey 的策略,但可能会发生,来自同一个浏览器的请求得到不同的 session_ids...
  • 您可能想查看 php 会话处理相关问题,例如 this
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-16
  • 2015-02-11
  • 1970-01-01
  • 1970-01-01
  • 2015-10-03
  • 1970-01-01
  • 2019-07-04
相关资源
最近更新 更多