0

我们有一个遗留(php)应用程序,接受文件上传,它们存储在取决于会话 ID 的路径中。现在我们必须为这个 webapp 提供一个非常简单的 API,通过 iOS api (iPad) 执行文件上传。我们返回一个 url,客户将在嵌入式 webkit 窗口中打开该 url。

由于上传和查看操作的会话不同,我们想获取会话参数并在文件上传的响应中返回它。然后客户端被重定向到该 url,我们将会话 id 设置为以前的 id 并继续到客户可以继续工作的页面。

显然,我尝试过的任何方法都不起作用。我们使用 Zend Framework 1,但这并不重要。我试过:

  1. 设置 Set-Cookie 标头(这会导致 cookie 包含两个 PHPSESSID 值)
  2. 使用 asetcookie("PHPSESSID", $session, 3600)设置 PHPSESSID
  3. 使用 Zend http 响应setHeader('Set-Cookie', 'PHPSESSID=....', true)

最后两个选项什么都不做,就像我根本没有设置会话一样。我该如何解决这个问题?实际上,我们不能过多地触及遗留代码库来修改其工作方式并更改文件上传的路径解析方式。

因此,流程是:请求 api.myapp.tld -> 响应正文中的字符串 -> 使用此响应字符串作为位置打开 webkit 窗口 -> 执行请求 -> 带有重定向标头和设置方法的响应cookie 到不同的东西-> Webkit 执行重定向 -> 客户访问与第一个请求 api.myapp.tld 具有相同会话 ID 的页面。

如果有其他方法可以设置会话 ID,那就太好了。

4

2 回答 2

0

这不是简单的调试,但你有一些选择。我不熟悉 Zend Framework 1.x,所以这不是特定于框架的(框架有时会在顶部添加东西),而是特定于 PHP。

在 PHP 中,会话由两件事来标识:

  1. 名称(例如:常见的默认名称是PHPSESSID
  2. ID(即随机“数字”)

名称允许一次使用多个会话,而 ID 则具体标识会话。

听起来您需要并行使用两个会话 ID。我建议您使需要处理旧会话的脚本具有与当前脚本不同的会话名称。

然后,您可以使用其他会话名称传入旧版/旧会话 id,当前会话可以保持原样。

我希望这些信息对你有用。如果您在实施时遇到问题,请询问。

于 2012-07-09T23:13:41.663 回答
0

我最终得到了一些更简单的东西。会话与这样的路径有关/path/to/location/ . $sessionId。当第二个会话开始时,我只是将目录从旧会话重命名为新会话。简单快速地完成这项工作。

于 2012-07-13T20:48:13.447 回答