2012-07-09 64 views
0

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

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

显然,没有任何我尝试过的作品。我们使用Zend Framework 1,但这应该不重要。我想:

  1. 设置一个Set-Cookie头(这将导致包含两个PHPSESSID值的cookie)
  2. 使用setcookie("PHPSESSID", $session, 3600)设置PHPSESSID
  3. 使用Zend HTTP效应初探与setHeader('Set-Cookie', 'PHPSESSID=....', true)

最后两个选项只是不做任何事情,就像我根本没有设置会话。我该如何解决这个问题?实际上,我们实际上无法触及遗留的代码库来修改其工作,并改变路径解析对文件上传的工作方式。

因此,流程是: 请求api.myapp.tld - >与主体的字符串响应 - >与此响应字符串作为位置打开的webkit窗口 - >执行请求 - >与重定向头响应以及将cookie设置为不同的方法 - > Webkit执行重定向 - >客户获取到与api.myapp.tld的第一个请求具有相同会话ID的页面。

如果有其他设置会话ID,它会很好。

回答

0

我结束了更简单的事情。会议与此路径相关,如/path/to/location/ . $sessionId。第二次会议开始时,我只是将目录从旧会话重新命名为新会话。简单而快速地获得这个工作。

0

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

PHP中的会话由两件事情确定:

  1. Name(例如:一个共同的默认名称为PHPSESSID
  2. ID(即随机 “数字”)

该名称允许一次使用多个会话,而ID则以特定的方式识别会话。

这听起来有点你需要并行使用两个会话ID。我建议你让需要处理旧会话的脚本拥有比当前脚本更多的会话名称。

然后,您可以通过使用其他会话名称传入传统/旧会话ID,而您的当前会话可以保持不变。

我希望这些信息对您有所帮助。如果您遇到问题需要执行,请询问。